문제(출처: https://www.acmicpc.net/problem/9324)
< 진짜 메시지 >
문제 풀이
HashMap을 사용하여 문자가 등장하는 수를 확인한다.
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;
public class _9324_ { // 진짜 메시지
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 t = Integer.parseInt(bf.readLine());
HashMap<Character, Integer> map = new HashMap<>();
for (int i = 0; i < t; i++) {
String str = bf.readLine();
int idx = 0;
boolean flag = false;
while (idx < str.length()) {
if (map.containsKey(str.charAt(idx))) {
map.replace(str.charAt(idx), map.get(str.charAt(idx)) + 1);
if (map.get(str.charAt(idx)) % 3 == 0) {
if (idx + 1 >= str.length() || str.charAt(idx + 1) != str.charAt(idx)) {
flag = true;
break;
}else {
idx += 2;
}
} else {
idx += 1;
}
} else {
map.put(str.charAt(idx), 1);
idx += 1;
}
}
if (flag) {
bw.write("FAKE\n");
} else {
bw.write("OK\n");
}
map.clear();
}
bw.flush();
}
}
변수)
t : 테스트케이스 개수
map : 각 문자 개수
str : 문자열
idx : 현재 탐색하는 문자열 인덱스
flag : 메시지 판별 여부
테스트케이스 수를 입력받는다. 테스트케이스 수만큼 다음 과정을 반복한다.
1) 문자열을 입력받는다.
2) 문자열을 탐색
2-1) HashMap에 이미 있는 문자라면 -> value+1
만약 value 값이 3의 배수라면 다음 문자도 현재 문자와 같은 문자여야 함 -> 같지 않다면 종료, 같다면 idx+2
만약 value 값이 3의 배수가 아니라면 idx+1
2-2) HashMap에 있는 문자가 아니라면 put
3) flag 값에 따라 정답 출력

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
| [Baekjoon] 21920_서로소 평균 (0) | 2024.05.30 |
|---|---|
| [Baekjoon] 3054_피터팬 프레임 (0) | 2024.05.29 |
| [Baekjoon] 11504_돌려 돌려 돌림판! (0) | 2024.05.27 |
| [Baekjoon] 2891_카약과 강풍 (0) | 2024.05.24 |
| [Baekjoon] 1544_사이클 단어 (0) | 2024.05.23 |