자바/백준

[백준 14405] 피카츄

슈슈버거 2022. 8. 22. 17:22

문제

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

 

14405번: 피카츄

피카츄는 "pi", "ka", "chu"를 발음할 수 있다. 따라서, 피카츄는 이 세 음절을 합친 단어만 발음할 수 있다. 예를 들면, "pikapi"와 "pikachu"가 있다. 문자열 S가 주어졌을 때, 피카츄가 발음할 수 있는 문

www.acmicpc.net


내가 작성한 코드

import java.io.*;

public class 백준14405 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String input = br.readLine();

        if(input.equals("pi") || input.equals("ka") || input.equals("chu")){
            bw.write("YES");
        }
        else{
            int i = 0;
            boolean state = false;

            if(input.length()==1){
                bw.write("NO");
            }
            else{
                while(i<input.length()){
                    if(i == input.length()-1){
                        bw.write("NO");
                        state = false;
                        break;
                    }
                    if(input.charAt(i) == 'p' && input.charAt(i+1) == 'i') {
                        i += 2;
                        state = true;
                    }
                    else if(input.charAt(i) == 'k' && input.charAt(i+1) == 'a') {
                        i += 2;
                        state = true;
                    }
                    else if(input.charAt(i) == 'c' && input.charAt(i+1) == 'h'){
                        if(i+2 >= input.length()){
                            bw.write("NO");
                            state = false;
                            break;
                        }
                        else if(input.charAt(i+2) == 'u'){
                            state = true;
                            i += 3;
                        }
                        else {
                            bw.write("NO");
                            state = false;
                            break;
                        }
                    }
                    else{
                        bw.write("NO");
                        state = false;
                        break;
                    }
                }

                if(state == true) {
                    bw.write("YES");
                }
            }
        }

        bw.close();
    }
}

맨 처음에

1. 시작이 p,k,c가 아닐 경우

2. p 다음에 i 가 아닐 경우

3. k 다음에 a가 아닐 경우

4. c 다음에 h 다음에 u 가 아닐 경우

 

이렇게만 고려했다가 틀렸다

 

생각해보니

1. 길이가 1일 때

2. pip처럼 가능한 문자열 하나 이후에 p,k,c 세 개 중 하나의 문자가 올 때

3. ch가 주어질 경우

4. 문자열이 pi, ka, chu 그 자체일 때

 

이 4가지를 고려하지 않았더라

 

그래서 4가지를 수정해서 제출했더니 정답이다

 

여러 번의 시도 끝에 겨우 맞춘 거 같다 휴