2 분 소요

1. 문제

https://www.acmicpc.net/problem/16165

  • 딕셔너리 문제
// 문제
정우는 소문난 걸그룹 덕후이다.
정우의 친구 준석이도 걸그룹을 좋아하지만
이름을 잘 외우지 못한다는 문제가 있었다.
정우는 친구를 위해 걸그룹 개인과 팀의 이름을 검색하여 외우게 하는
퀴즈 프로그램을 만들고자 한다.

// 입력
첫 번째 줄에는 총 입력 받을 걸그룹의 수 N(0 < N < 100)과
맞혀야 할 문제의 수 M(0 < M < 100)을 입력받는다.

두 번째 줄부터는 각 걸그룹마다 팀의 이름, 걸그룹의 인원 수, 멤버의 이름을
한 줄씩 차례대로 입력받는다.
팀과 멤버의 이름은 최대 100글자이며, 모든 글자는 알파벳 소문자이다.
하나의 걸그룹이나 서로 다른 두 걸그룹에 이름이 같은 두 멤버가 있는 경우는 없다.

그 다음 줄부터는 M개의 퀴즈를 입력받는다.
각각의 퀴즈는 두 줄로 이루어져 있으며,
팀의 이름이나 멤버의 이름이 첫 줄에 주어지고
퀴즈의 종류를 나타내는 0 또는 1이 두 번째 줄에 주어진다.
퀴즈의 종류가 0일 경우 팀의 이름이 주어지며, 1일 경우 멤버의 이름이 주어진다.

// 출력
첫 번째 줄부터 차례대로 퀴즈에 대한 답을 출력한다.
퀴즈의 종류가 0일 경우 해당 팀에 속한 멤버의 이름을
사전순으로 한 줄에 한 명씩 출력한다.
퀴즈의 종류가 1일 경우 해당 멤버가 속한 팀의 이름을 출력한다.

// 예제 입력 1
3 4
twice
9
jihyo
dahyeon
mina
momo
chaeyoung
jeongyeon
tzuyu
sana
nayeon
blackpink
4
jisu
lisa
rose
jenny
redvelvet
5
wendy
irene
seulgi
yeri
joy
sana
1
wendy
1
twice
0
rose
1

// 예제 출력 1
twice
redvelvet
chaeyoung
dahyeon
jeongyeon
jihyo
mina
momo
nayeon
sana
tzuyu
blackpink


2. 핵심 아이디어

  • 딕셔너리와 리스트를 연결하여 사용


3. Python 문제풀이

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
team_mem, mem_team = {}, {}

for i in range(n) :
  team, num = input().rstrip(), int(input())
  team_mem[team] = []
  for j in range(num) :
    member = input().rstrip()
    team_mem[team].append(member)
    mem_team[member] = team

for i in range(m) :
  member, q = input().rstrip(), int(input())
  if q :
    print(mem_team[member])
  else :
    for mem in sorted(team_mem[member]) :
      print(mem)


4. Java 문제풀이

import java.awt.desktop.SystemEventListener;
import java.io.*;
import java.math.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st = new StringTokenizer(br.readLine());
		StringBuilder sb = new StringBuilder();

		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		HashMap<String,String> hsm = new HashMap<>();
		ArrayList<String> arr = new ArrayList<>();

		for (int i=0; i<n; i++) {
		String team = br.readLine();
		int num = Integer.parseInt(br.readLine());
			for(int j=0; j<num; j++) {
				sb.append(br.readLine() + " ");
			}
			hsm.put(team, sb.toString());
			sb.setLength(0);
		}

		for(int i=0; i<m; i++) {
			String str = br.readLine();
			int num = Integer.parseInt(br.readLine());
			arr.clear();

			if (num == 0) {
				StringTokenizer st2 = new StringTokenizer(hsm.get(str)," ");
				while (st2.hasMoreTokens()) {
					arr.add(st2.nextToken());
				}
				Collections.sort(arr);
				for (int j=0; j<arr.size(); j++) {
					bw.write(arr.get(j)+"\n");
				}
			}

			else {
				Iterator<String> it = hsm.keySet().iterator();
				while(it.hasNext()) {
					String key = it.next();
					StringTokenizer st3 = new StringTokenizer(hsm.get(key)," ");

					while(st3.hasMoreTokens()) {
						String strr = st3.nextToken();
						if(str.equals(strr)) {
							bw.write(key+"\n");
						}
					}
				}
			}
		}
		bw.flush();
		bw.close();
	}
}

댓글남기기