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);
}
}
}
'알고리즘 > 해시를 사용한 집합과 맵' 카테고리의 다른 글
[백준] 1270 전쟁 - 땅따먹기 - 해시맵(HashMap) JAVA (0) | 2024.08.13 |
---|---|
[백준] 22233 가희와 키워드 - HashSet(해시셋) JAVA (0) | 2024.08.12 |
[백준] 3273 두 수의 합 - HashSet(해시셋) + 정렬(Sort) + 투포인터(Two Pointer) JAVA (0) | 2024.07.23 |
[백준] 2002 추월 - HashMap(해시맵) + 구현(Implementation) JAVA (0) | 2024.04.03 |
[백준] 16165 걸그룹 마스터 준석이 - HashMap(해시맵) + HashSet(해시셋) + TreeSet(트리셋) JAVA (0) | 2024.04.02 |