Algorithms/백준

[백준] '모음의 개수' - Java

LEFT 2024. 6. 1. 15:59

<문제 제시>

영문 문장을 입력받아 모음의 개수를 세는 프로그램을 작성하시오. 모음은 'a', 'e', 'i', 'o', 'u'이며 대문자 또는 소문자이다.

 


<문제 해결 과정>

먼저 모든 영문들을 toUpperCase()를 통하여 대문자로 만들고, if문에서 charAt()을 통해 일치하는 모음들

즉 A, E, I, O, U 들을 찾고자 하였다.


<Try 1>

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	
String s = "";
int count = 0;
char test;

while(true) {
    s = br.readLine();

    if(s.equals("#")) break;

    s = s.toUpperCase();

    for(int i = 0; i < s.length(); i++) {
        test = s.charAt(i);

        if(test == 'A' || test == 'E' || test == 'I'
        || test == 'O' || test == 'U') {
            count++;
        }
        else break;
    }

    System.out.println(count);

}

while(true) 무한반복을 통해 '#' 문자가 입력될때까지 처리해주었다.

문자열 s를 s.toUpperCase()를 통해 대문자로 바꾸고,

s.length()만큼 for반복문을 통해 문자열의 각 문자를 가져와 test변수에 넣어주었다.

OR 논리연산자를 통해 test == 'A' ... test=='U' 인 경우를 검출해 count값을 증가시켰다.

그렇게 핵심 로직인 A,E,I,O,U 검출 로직을 for문으로 작성하였는데, 제대로 동작하지 않았다. 

이번엔 switch문으로 바꾸어 진행해보았다.


<Answer 1>

for(int i = 0; i < s.length(); i++) {
    switch(s.charAt(i)) {
        case 'A' :
        case 'E' :
        case 'I' :
        case 'O' :
        case 'U' :
            count++;
        default:
            break;
    }
}
sb.append(count).append('\n');
count = 0;

동일하게 모든 문자를 대문자로 바꿔주고, switch문읕 통해 각 케이스별로 해당하게되면 count++ 처리해주었다.

 각 문장 별로 모음의 개수를 출력해주어야하기때문에 각 문장별 모음의 개수를 배열로 저장하여 출력하기보다

StringBuilder를 통해 출력해주었다.


<전체 코드>

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

    String s = "";
    int count = 0;
    char test;

    while(true) {
        s = br.readLine();

        if(s.equals("#")) break;

        s = s.toUpperCase();

        for(int i = 0; i < s.length(); i++) {
            switch(s.charAt(i)) {
                case 'A' :
                case 'E' :
                case 'I' :
                case 'O' :
                case 'U' :
                    count++;
                default:
                    break;
            }
        }
        sb.append(count).append('\n');
        count = 0;
    }
    System.out.println(sb);
}

if문과 OR논리 연산자를 통하여 처리하였던 부분을 switch-case문을 통해 정리할 수 있었다.


<문제 링크>

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