본문 바로가기

백준/Java

[JAVA] 문자열에서 모음 개수 구하기

백준 1264번 '모음의 개수' 문제
https://www.acmicpc.net/problem/1264

 

조건 

모음 'a', 'e', 'i', 'o', 'u' 대소문자 구분 없이 개수를 구하라. 한 줄에 '#' 한 글자만이 주어지면 프로그램을 종료한다.

 

접근

for(int i = 0; i < str.length(); i++){
                if(str.CharAt(i) = 'a' || str.CharAt(i) = 'e' || str.CharAt(i) = 'i' || str.CharAt(i) = 'o' || str.CharAt(i) = 'u' || str.CharAt(i) = 'A' || str.CharAt(i) = 'E' || str.CharAt(i) = 'I' || str.CharAt(i) = 'O' || str.CharAt(i) = 'U' )
            }

처음엔 단순하게 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U' 모두를 조건에 추가하여 개수를 파악하려했다. 하지만 코드가 너무 길어지고 지저분해 보였다. 이렇게 된다면 10개를 비교해야되기 때문에 소요가 커질 수 밖에 없었다.

Scanner sc = new Scanner(System.in);
        while(true) {
            int count = 0;
            String str = sc.nextLine();
            if (str.equals("#"))
                break;
            for (char ch : str.toLowerCase().toCharArray()) {
                if ("aeiou".indexOf(ch) != -1) {
                    count++;
                }
            }
            System.out.println(count);
        }

toLowerCase()모든 문자를 소문자로 만든다. 그후 toCharArray()로 입력받은 srt 문자열을 배열로 만들어 각각의 요소를 접근할 수 있도록 만들었다.
그 후, 모음 문자열 "aeiou"indexOf()로 접근하여 str 문자 배열의 각 원소를 비교한다. 여기서 일치하는 요소(모음)가 없을 경우 -1를 리턴하는 indexOf()의 원리를 활용하여 조건문을 작성하였다.