안녕하세요. 회사와 함께 성장하고 싶은 KOSE입니다.
이번 포스팅은 백준 문자열 문제 - 여우는 어떻게 울지? 자바 풀이를 진행하도록 하겠습니다.
문제 출처: https://www.acmicpc.net/problem/9536
1. 풀이 소스
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < T; i++) {
HashMap<String, ArrayList<Integer>> map = new HashMap<>();
String[] saying = br.readLine().split(" "); // 울음소리 저장
for (int c = 0; c < saying.length; c++) {
if (!map.containsKey(saying[c])) map.put(saying[c], new ArrayList<>(List.of(c))); //키 파악
else map.get(saying[c]).add(c); // 키 있다면 list에 저장
}
String str;
while((str = br.readLine()) != null && !str.equals("what does the fox say?")) {
String[] strArr = str.split(" ");
String sound = strArr[strArr.length - 1];
List<Integer> list = map.get(sound);
for (Integer num : list) saying[num] = ""; // 울음 소리가 저장된 인덱스 찾아서 "" 만들기
}
for (String say : saying) {
if (say != null && !say.equals("")) sb.append(say).append(" "); // null이 아니고 ""가 아니라면 울음 소리 저장
}
sb.append("\n");
}
System.out.print(sb);
}
}
2. 풀이 중점 사항
HashMap<String, ArrayList<Integer>> map = new HashMap<>();
String[] saying = br.readLine().split(" "); // 울음소리 저장
for (int c = 0; c < saying.length; c++) {
if (!map.containsKey(saying[c])) map.put(saying[c], new ArrayList<>(List.of(c))); //키 파악
else map.get(saying[c]).add(c); // 키 있다면 list에 저장
}
울음소리는 계속 반복되므로, HashMap에 울음소리와 울음소리의 인덱스를 저장할 ArrayList<>을 key - value로 설정하여 값을 저장하였습니다.
정해진 개수만큼 입력을 받는 것이 아닌, EOF 혹은 특정 문자열 입력을 받으면 종료하는 로직을 작성해야할 때가 있습니다.
String str;
while((str = br.readLine()) != null && !str.equals("what does the fox say?")) {
}
이 경우, str에 br.readLine() 값을 할당했을 때, 그 값이 null이 아니고, 필요로 하는 문자열이 아닌 경우에만 입력을 계속 받을 수 있도록 처리하였습니다.
이상으로 여우는 어떻게 울지? 풀이를 마치도록 하겠습니다. 감사합니다.!
'Algorithm' 카테고리의 다른 글
[Algorithm] 백준 스택 문제 - 히스토그램(1725) 자바 풀이 (0) | 2023.05.23 |
---|---|
[Algorithm] 백준 문자열 문제 - 무한 문자열(12871) 자바 풀이 (0) | 2023.05.23 |
[Algorithm] 백준 유니온파인드 문제 - 친구 네트워크(4195) 자바 풀이 (0) | 2023.05.23 |
[Algorithm] 백준 플로이드-와샬 문제 - 플로이드(11404) 자바 풀이 (0) | 2023.05.23 |
[Algorithm] 백준 벨만포드 문제 - 타임머신(11657) 자바 풀이 (0) | 2023.05.22 |