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();
	}
}

댓글남기기