<문제 제시>
영문 문장을 입력받아 모음의 개수를 세는 프로그램을 작성하시오. 모음은 '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
'Algorithms > 백준' 카테고리의 다른 글
[백준] '럭비 클럽' - Java (0) | 2024.06.01 |
---|---|
[백준] '꼬마 정민' - Java (0) | 2024.06.01 |
[백준] '피보나치 수 5' - Java (0) | 2023.07.20 |
[백준] '팩토리얼' - Java (0) | 2023.07.19 |
[백준] '좌표 압축' - Java (0) | 2023.07.19 |