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

코드설명

해시셋을 활용합니다.

 

처음에 문제를 잘못이해하여, 순서대로 출력하되 울음소리를 각 종류소리별로 출력하는 줄알고 LinkedHashMap을 활용해 순서를 유지한채로 진행했습니다.

 

하지만, 그렇게 하지않고 각 울음소리는 모두 각자 처리하여 진행합니다.

 

1. 먼저 울음소리를 soundArr에 저장합니다.

2. HashSet Fox의 울음소리인 것들만 남기기 위해 다른 동물의 울음소리일경우 remove 합니다.

3. HashSet의 값과 soundArr을 비교하여 HAshSet에 있는 소리만 출력하면 여우의 울음소리만 출력됩니다.

 

코드

package Main;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.StringTokenizer;

public class Main {
    public static int N, T, M; 
    public static int answer = 0;
    
    public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());

		T = Integer.parseInt(st.nextToken());
		while(T-- > 0) {
			st = new StringTokenizer(br.readLine());
			ArrayList<String> soundArr = new ArrayList<String>();
			HashSet<String> hashset = new HashSet<>();
			while(st.hasMoreElements()) {
				String sound = st.nextToken();
				soundArr.add(sound);
				hashset.add(sound);
			}
			while(true) {
				st = new StringTokenizer(br.readLine());
				st.nextToken(); st.nextToken();
				String sound = st.nextToken();
				if(sound.equals("the")) {
					st.nextToken(); st.nextToken();
					break;
				}
				hashset.remove(sound);
			}
			
			for(String v : soundArr) {
				if(hashset.contains(v)) {
					System.out.print(v+" ");
				}
			}
		}
		
	}
    
}

처음에 문제를 잘못이해한 코드입니다.

물음을 한번에 뭉쳐서 출력하는 것이 아닌, 순서에 따라서 출력해야 합니다........

package Main;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.StringTokenizer;

public class Main {
    public static int N, T, M; 
    public static int answer = 0;
    
    public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());

		T = Integer.parseInt(st.nextToken());
		while(T-- > 0) {
			st = new StringTokenizer(br.readLine());
			LinkedHashMap<String, Integer> hashmap = new LinkedHashMap<>();
			while(st.hasMoreElements()) {
				String sound = st.nextToken();
				hashmap.put(sound, hashmap.getOrDefault(sound, 0) + 1);
			}
			System.out.println();
			
			while(true) {
				st = new StringTokenizer(br.readLine());
				st.nextToken(); st.nextToken();
				String sound = st.nextToken();
				if(sound.equals("the")) {
					st.nextToken(); st.nextToken();
					break;
				}
				hashmap.remove(sound);

			}
			
			StringBuilder sb = new StringBuilder();
			for(Map.Entry<String, Integer> entrySet : hashmap.entrySet()) {
				for(int i=0;i<entrySet.getValue(); i++) {
					sb.append(entrySet.getKey()).append(" ");
				}
			}
			System.out.println(sb);
		}
		
	}
    
}

+ Recent posts