문제(출처: https://www.acmicpc.net/problem/6973)
< Dynamic Dictionary Coding >
문제 풀이
HashMap을 활용하여 HashMap에 없는 값이라면 추가를, 있다면 value를 출력한다.
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.HashMap;
import java.util.StringTokenizer;
public class _6973_ { // Dynamic Dictionary Coding
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int n = Integer.parseInt(bf.readLine());
String str = "";
HashMap<String, Integer> map = new HashMap<>();
int idx = 1;
boolean flag=false;
while (n > 0) {
str = bf.readLine();
if (str == null || str.equals("")) {
n -= 1;
map.clear();
idx = 1;
if (n == 0) {
break;
} else {
bw.write("\n");
}
} else if(flag){
bw.write("\n");
}
st = new StringTokenizer(str);
while (st.hasMoreTokens()) {
String word = st.nextToken();
if (map.containsKey(word)) {
bw.write(map.get(word) + " ");
} else {
bw.write(word + " ");
map.put(word, idx++);
}
}
flag=true;
}
bw.flush();
}
}
변수)
n : 세트 수
str : 입력 값
map : HashMap <word, 번호>
idx : 번호
flag : 줄 바꿈 여부
세트 수를 입력받는다. 세트 수가 0보다 클 때 다음 과정을 반복한다.
1) 문장이 비었거나 입력이 끝이라면 n-1, HashMap과 idx를 초기화한다. n이 0이라면 종료하며 0이 아니라면 줄 바꿈 한다.
2) 줄 바꿈 여부가 true라면 줄 바꿈 한다.
3) 문장을 단어로 끊어 읽으며 HashMap에 키 값으로 존재한다면 value를 출력하고, 키 값이 존재하지 않는다면 HashMap에 추가하고 원래 단어를 출력한다.
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
[Baekjoon] 29934_Important Messages (1) | 2025.01.20 |
---|---|
[Baekjoon] 9951_Word Extraction (1) | 2025.01.17 |
[Baekjoon] 11518_Morse (0) | 2025.01.16 |
[Baekjoon] 4775_Spelling Be (1) | 2025.01.15 |
[Baekjoon] 18294_Biodiversity (0) | 2025.01.14 |