알고리즘/백준

[Java] 백준 9324 진짜 메시지 - 실버5

fladi 2023. 7. 16. 12:30
728x90

 

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

 

9324번: 진짜 메시지

스파이들은 사령부와 통신하기 위해서 SMTP(비밀 메시지 전송 프로토콜)를 사용해 비밀 회선으로 전자 메시지를 보낸다. 메시지가 적들에 의해 조작되어 보내진 것이 아닌 진짜 메시지라는 것

www.acmicpc.net

  • 문제를 대충 읽어서 3번째만 바뀌는 줄 알았다. 알고보니 3번 째 나올 때마다 계속 두 번씩 나와야했다;;
  • ex) A B A B AA B A B A B AA 

 

 

 

내 풀이(HashMap 사용)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class Main {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int testCaseCnt = Integer.parseInt(br.readLine().strip());

    Map<Character, Integer> map;

    for (int tc =0; tc<testCaseCnt; tc++) {
      map = new HashMap<>();
      String word = br.readLine().strip();
      boolean isTrue = true;

      for (int i =0; i<word.length(); i++) {
        char c = word.charAt(i);

        //처음보는 글자일 때
        if (map.get(c) == null) {
          map.put(c, 1);
          continue;
        }

        int cnt = map.get(c);
        if (cnt == 2) {
          if (i == word.length()-1 || word.charAt(i+1) != c) {
            //세 번째 숫자인데 뒤에 같은 글자가 안따라붙으면 fake
            isTrue = false;
            break;
          }

          i++;
          map.put(c, 0);
        } else {
          map.put(c, cnt+1);
        }

      }

      if (isTrue)
        System.out.println("OK");
      else
        System.out.println("FAKE");
    }
  }
}
  • 한 글자씩 떼보면서 HashMap에 해당 글자의 개수를 센다
  • 글자가 3번이 나오면 다음 글자가 같은 글자인지 확인 후, HashMap에 개수를 0으로 넣고 인덱스를 하나 증가시킨다
  • 만약 세 번째 글자일 때 마지막 글지이거나 뒷 글자가 나와 같지 않은 경우 FAKE이다.

 

 

 

 

 

728x90