문제(출처: https://www.acmicpc.net/problem/4675)
< Word Amalgamation >
문제 풀이
단어를 알파벳순으로 정렬하여 HashMap <정렬된 단어, ArrayList <단어>>를 저장한다.
if) tarp이라면 HashMap에 key 값으로 aprt를 저장하고 value로 ArrayList <tarp>를 저장한다.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
public class _4675_ { // Word Amalgamation
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = 2;
HashMap<String, ArrayList<String>> map = new HashMap<>();
while (num > 0) {
String str = bf.readLine();
if (str.equals("XXXXXX")) {
num -= 1;
} else {
char[] arr = str.toCharArray();
Arrays.sort(arr);
String result = new String(arr);
if (num == 2) {
if (map.containsKey(result)) {
map.get(result).add(str);
} else {
ArrayList<String> temp = new ArrayList<>();
temp.add(str);
map.put(result, temp);
}
} else {
if (map.containsKey(result)) {
ArrayList<String> temp = map.get(result);
Collections.sort(temp);
for (String x : temp) {
bw.write(x + "\n");
}
} else {
bw.write("NOT A VALID WORD\n");
}
bw.write("******\n");
}
}
}
bw.flush();
}
}
변수)
num : 종료 조건
map : HashMap <String, ArrayList <String>>
str : 입력
arr : 입력받은 단어 -> 배열
result : 단어를 알파벳순으로 정렬한 결과
num이 0보다 클 때 다음 과정을 반복한다.
1) 문자열이 "XXXXXX"라면 num-1
2) 문자열이 "XXXXXX" 아니라면 문자열을 char 배열로 전환하여 정렬한 후 문자열로 바꾼다.
3) num이 2이고 key값이 있다면 value에 단어 추가, key값이 없다면 map에 key값과 ArrayList 추가
4) num이 1이라면 HashMap에서 key값을 찾아 존재한다면 value를 출력하고 key값이 없다면 "NOT A VALID WORD"를 출력한다.
5) "******" 출력
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
[Baekjoon] 4408_Election (0) | 2025.02.12 |
---|---|
[Baekjoon] 4368_Babelfish (0) | 2025.02.11 |
[Baekjoon] 18706_Coffee (0) | 2025.02.07 |
[Baekjoon] 14455_Don't Be Last! (1) | 2025.02.06 |
[Baekjoon] 4351_Hay Points (1) | 2025.02.05 |