🌞Algorithm/🔥Baekjoon

[Baekjoon] 9324_진짜 메시지

뿌야._. 2024. 5. 28. 22:47

Silver IV

문제(출처: 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 값에 따라 정답 출력