엄지월드

백준 4659 비밀번호 발음하기 본문

알고리즘

백준 4659 비밀번호 발음하기

킨글 2024. 5. 9. 22:18

문제

설명

while문을 돌면서 요구사항대로 구현했는데, 틀리다고 나오는 부분이 있어서 맞왜틀?을 시전하고 있었다.

틀렸던 부분은 ap와 같이 1개만 모음이 있을 때에 처리를 못해주었는데, 해당 부분을 처리하니 맞았다.

checkVowel이라는 메소드를 별도로 만들어서 자음을 체크해주었고, 현재와 다음 인덱스가 자음이면 +2를 해주었다.

+1만 해주니 3개 연속 자음일 때에 체크가 안되어서 >3 으로 3보다 큰 경우에 if문을 처리하고, 자음일 때 +2를 해주었다.

소스

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

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

        while(true) {
            String s = br.readLine();
            if("end".equals(s)) {
                break;
            }
            int vowelCnt = 0;
            int consonant = 0;
            boolean isAcceptable = false;

            for (int i = 0; i < s.length()-1; i++) {
                char nowChar = s.charAt(i);
                char nextChar = s.charAt(i+1);
                boolean isNowVowel = checkVowel(nowChar);
                boolean isNextVowel = checkVowel(nextChar);

                if(isNowVowel && isNextVowel) {
                    isAcceptable = true;
                    vowelCnt += 2;
                } else if(!isNowVowel && !isNextVowel) {
                    consonant += 2;
                } else {
                    vowelCnt = 0;
                    consonant = 0;
                    if(isNowVowel || isNextVowel) {
                        isAcceptable = true;
                    }
                }

                if(nowChar == nextChar && (nowChar != 'e' && nextChar != 'e')  && (nowChar != 'o' && nextChar != 'o')) {
                    isAcceptable = false;
                    break;
                }

                if(vowelCnt > 3 || consonant > 3) {
                    isAcceptable = false;
                    break;
                }
            }

            if(s.length() == 1 && checkVowel(s.charAt(0))) {
                isAcceptable = true;
            }

            if(isAcceptable) {
                bw.write("<" + s + ">" + " is acceptable.\n");
            } else {
                bw.write("<" + s + ">" + " is not acceptable.\n");
            }


        }

        bw.flush();
        bw.close();
    }

    private static boolean checkVowel(char c) {
        switch (c) {
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':
            {
                return true;
            }

            default: {
                return false;
            }
        }
    }


}

 

'알고리즘' 카테고리의 다른 글

백준 4158 CD  (0) 2024.06.25
백준 15904 UCPC는 무엇의 약자일까?  (0) 2024.05.13
백준 5800 성적 통계  (0) 2024.05.08
백준 16435 스네이크버드  (0) 2024.05.06
백준 10826 피보나치 수 4  (0) 2024.05.01
Comments