반응형
코드포스 4C Registration system 풀이 코드 | Java (자바)
문제 해설
문자열들을 순서대로 기록하며 새로운 문자열일 땐 'OK'를, 중복된 문자열일 땐 문자열 끝에 오름차순으로 숫자를 붙여 출력하는 문제입니다.
풀이
한 번 등장한 문자열을 HashSet에, 해당 문자열과 중복 횟수를 HashMap에 저장하면서 새로 들어오는 문자열이 중복인지 아닌지 판단합니다. 최대 100,000개 문자열이 들어오기 때문에 List 같은 구조를 사용할 경우 문자열 중복을 판단할 때 시간제한에 걸리기 쉽습니다. 그래서 탐색이 빠른 HashSet.contains()를 사용합니다. 또, 혹시 모를 입출력 지연도 막기 위해 Scanner 대신 BufferedReader를 사용했습니다. 문자열이 중복되지 않는다면 각 HashMap과 HashSet에 새로운 문자열을 기록하고 'OK'를 출력, 중복이라면 해당 문자열의 중복 횟수를 1회 늘린 후 중복 횟수와 함께 출력합니다.
코드
import java.util.HashMap;
import java.util.HashSet;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) {
HashMap<String, Integer> numbers = new HashMap<>();
HashSet<String> names = new HashSet<>();
String buffer;
try{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
for(int i = 0; i < n; i++){
buffer = br.readLine();
if(!names.contains(buffer)){
numbers.put(buffer, 1);
names.add(buffer);
bw.write("OK\n");
}
else{
bw.write(buffer+ numbers.get(buffer) +"\n");
numbers.put(buffer, numbers.get(buffer) + 1);
}
}
bw.flush();
bw.close();
}
catch (Exception e) {
}
}
}
문제 출처
반응형
'Coding > CODEFORCES' 카테고리의 다른 글
[코드포스 CODEFORCES] 4C Registration system 풀이 코드 (Python) (0) | 2021.06.22 |
---|---|
[코드포스 CODEFORCES] 231A Team 풀이 코드 (C) (0) | 2021.06.19 |
[코드포스 CODEFORCES] 4C Registration system 풀이 코드 (C) (0) | 2021.06.01 |
[코드포스 CODEFORCES] 4B Before an Exam 풀이 코드 (C++) (0) | 2021.05.31 |
[코드포스 CODEFORCES] 4B Before an Exam 풀이 코드 (Python) (0) | 2021.05.30 |