메이쁘

(JAVA) 백준 9324번 : 진짜 메세지 본문

Algorithm/Baekjoon

(JAVA) 백준 9324번 : 진짜 메세지

메이쁘 2020. 4. 22. 02:00

 

https://www.acmicpc.net/problem/9324

 

9324번: 진짜 메시지

문제 스파이들은 사령부와 통신하기 위해서 SMTP(비밀 메시지 전송 프로토콜)를 사용해 비밀 회선으로 전자 메시지를 보낸다. 메시지가 적들에 의해 조작되어 보내진 것이 아닌 진짜 메시지라는 것을 표시하기 위해 모든 메시지는 회선에 노이즈가 있었거나 발신 측에서 손을 떨면서 메시지를 보낸 것처럼 변형되는데, 이 변형 알고리즘은 메시지를 가로채는 자들이 우연히 변형 규칙을 흉내 낼 수 없을 정도로 정교하다. 또한 요원들의 머리에 총구가 겨눠져 강제로 메시지를

www.acmicpc.net

 

 

구현 문제.

 

단순히 문제대로 진행하면 된다.

 

 

 

핵심

형광펜을 칠한 내용을 보면 끝이다.

" 각 문자가 세 번 등장할 때 (그 다음에) 한 번 더 문자가 삽입된다. "

 

 

즉, aaba 라는 문자가 있다면

 

a가 3번 등장했기 때문에

 

그 다음 문자는 무조건 a여야 한다.

aaba -> aabaa

 

 

이에 대한 예외처리

 

 

 

알파벳 대문자 26개로만 구성되어 있기 때문에

 

A의 아스키코드가 65임을 고려했을 때

 

알파벳 대문자 - 65('A') 의 값을 index로 하는 int 배열을 생성하여

 

알파벳 하나하나 카운팅해주면 훨씬 좋다.

 

 

 

 

그럼 곰방 끝난다!!!

 

 

 

감사합니다.

 

 

 

소스코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// 진짜 메세지
// 구현 문제
public class p9324 {
	static int ASCII = 65;	// A : 65
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int tc = Integer.valueOf(st.nextToken());
		StringBuilder sb = new StringBuilder();
		
		while(tc --> 0) {
			st = new StringTokenizer(br.readLine());
			String msg = st.nextToken();
			char[] msgCharArr = msg.toCharArray();
			int[] alphabet = new int[26];
			boolean isValid = true;
			
			// 알파벳 개수 카운트
			for(int i = 0; i < msgCharArr.length; i++) {
				int gap = msgCharArr[i] - ASCII;
				alphabet[gap]++;
				if(alphabet[gap] == 3) {
					if(i + 1 >= msgCharArr.length) {
						isValid = false;
						break;
					}
					
					if(msgCharArr[i] == msgCharArr[i + 1]) {
						alphabet[gap] = 0;
						i++;
					}
					else {
						isValid = false;
						break;
					}
				}
			}
			
			if(isValid) {
				sb.append("OK").append("\n");
			}
			else {
				sb.append("FAKE").append("\n");
			}
		}
		
		System.out.println(sb.toString());
	}
}

 

 

 

 

Comments