본문 바로가기
공부 정리/백준

[백준] 자바 16165 걸그룹 마스터 준석이

by 경적필패. 2021. 7. 16.
반응형

문제

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

입력

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

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

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

출력

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


테스트 케이스

초록색 입력 / 검은색 출력

 

 


접근

두개의 수를 받습니다.

첫 번째 수는 걸그룹의 수, 두 번째 수는 문제의 수입니다.

걸그룹의 이름을 입력받으면 수를 입력받아서 그 수만큼 멤버들의 이름을 입력받습니다.

입력이 다 끝나면

문제를 입력받아야 합니다.

문자열을(걸그룹 이름) 치고 0을 입력하면 해당하는 걸그룹의 멤버들의 이름을 모두 출력하고,

문자열을(걸그룹 맴버 이름) 치고 1을 입력하면 해당하는 걸그룹의 이름을 출력합니다.

 

문제 출력으로 정렬도 요구하기 때문에, arraylist를 사용해주고

hashmap에 하나의 키에 걸그룹 멤버들을 모두 넣고 StringTokenizer 이용하여 잘라줘서 이용합니다.


코드

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

public class Main {

	/*
 	 16165 problem
	*/
	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		
		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());
		
		//걸그룹 문자열을 받아서 hashmap에 ㅓㄶ기
			for(int j=0; j<num; j++) {
				sb.append(br.readLine()+" ");
			}
			hsm.put(team, sb.toString());
			sb.setLength(0); //stringBuilder 초기화;
		}
		
		//문제관련 for문
		for(int i=0; i<M; i++) {
			String str = br.readLine();
			int num = Integer.parseInt(br.readLine());
			arr.clear();
			
			//0의 입력이 들어왔을때
			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");
				}
			}
			
			//1의 입력이 왔을때
			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();
						//System.out.println("이건str:" +str);
						//System.out.println("토큰 : "+strr);
						if(str.equals(strr)) {
							bw.write(key+"\n");
						}
					}
				}
			}
		}
		
		bw.flush();
		bw.close();
	}
	
}

주의

정렬도 해주어야 함.

 

반응형

'공부 정리 > 백준' 카테고리의 다른 글

[백준] 자바 9095 1, 2, 3 더하기  (0) 2021.07.19
[백준] 자바 10866 덱  (0) 2021.07.19
[백준] 자바 4358 생태학  (0) 2021.07.15
[백준] 자바 1269 대칭 차집합  (0) 2021.07.14
[백준] 자바 2776 암기왕  (0) 2021.07.13

댓글