1 분 소요



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



🔍 문제 풀이

문제 도식화

contains을 사용하지 않은 이유

contains 대신 직접 비교를 쓰는 이유

  • contains는 찾으려는 문자를 발견할 때까지 문자열을 처음부터 순차적으로 검사하는 방식으로 동작
  • contains는 문자열을 생성(String.valueOf(ch))하고, 그 문자열을 다시 vowels 문자열(“aeiou”)에서 찾는 추가적인 내부 과정을 거쳐 느림
  • 반면 ch == 'a' || ch == 'e' || ...처럼 직접 비교하는 방식은 불 필요한 작업이 없어 더 빠름



💻 전체 코드

  • charAt(i) 사용: 문자의 위치나 연속성 등 순서와 관련된 규칙을 검사할 때 사용
  • contains 사용: 특정 문자가 문자열에 포함되어 있는지 여부만 판단할 때 사용
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        while (true) {
            String str = br.readLine();
            if (str.equals("end")) {
                break;
            }

            sb.append("<").append(str).append(">");
            if (solve(str)) {
                sb.append(" is acceptable.\n");
            } else {
                sb.append(" is not acceptable.\n");
            }
        }
        System.out.print(sb);
    }

    private static boolean isVowel(char ch) {
        return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u';
    }

    static boolean solve(String str) {
        boolean hasVowel = false;
        int vowelCnt = 0;
        int consonantCnt = 0;

        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);

            // isVowel 함수를 사용해 모음인지 효율적으로 판별
            if (isVowel(ch)) {
                vowelCnt++;
                consonantCnt = 0;
                hasVowel = true;
            } else {
                vowelCnt = 0;
                consonantCnt++;
            }

            // 모음 또는 자음 3개 연속 x
            if (vowelCnt >= 3 || consonantCnt >= 3) {
                return false;
            }

            // 같은 글자 두번 연속 x 단, ee와 oo는 허용
            if (i > 0 && str.charAt(i - 1) == ch) {
                if (ch != 'e' && ch != 'o') {
                    return false;
                }
            }
        }
        return hasVowel;
    }
}


카테고리:

업데이트:

댓글남기기