import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] arge) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int cnt = 0;
char ch ;
for(int i = 0 ; i < str.length(); i++) {
ch = str.charAt(i);
if(ch == 'c') {
if(i < str.length() -1) {
if(str.charAt(i+1) == '=' || str.charAt(i+1) == '-') {
i++;
}
}
}else if(ch == 'd') {
if(i < str.length() -1) {
if(str.charAt(i+1) == 'z' ) {
if(i < str.length() -2) {
if(str.charAt(i + 2) == '=') {
i += 2;
}
}
}else if(str.charAt(i+1) == '-') {
i++;
}
}
}else if(ch == 'l') {
if(i < str.length() -1) {
if(str.charAt(i+1) == 'j') {
i++;
}
}
}else if(ch == 'n') {
if(i < str.length() -1) {
if(str.charAt(i+1) == 'j') {
i++;
}
}
}else if(ch == 's') {
if(i < str.length() -1) {
if(str.charAt(i+1) == '=') {
i++;
}
}
}else if(ch == 'z') {
if(i < str.length() -1) {
if(str.charAt(i+1) == '='){
i++;
}
}
}
cnt++;
}
System.out.println(cnt);
}
}
○ 문제 요약
입력받은 문자열에 알파벳과 크로아티아 알파벳이 몇 개 있는지 개수를 출력해라!
○ 문제 풀이
일단 charAt() 메소드를 이용해서 입력받은 문자열을 하나씩 쪼갠 뒤 그 다음 문자를 보고 개수를 올리려고 계획을 하고 코드 작성을 시작했다.
위 소스 코드처럼 ch가 c, d, l, n, s, z 일 경우 그 뒤에 문자를 보고 크로아티아 알파벳이면 i++을 해주었다.
그 이유는 아래 그림으로 설명하겠다.
우리가 if문 안에서 i++을 해주지 않으면 크로아티아 알파벳을 찾고도 1번 방향이 아닌 2번 방향으로 가게 되어 우리가 생각한 개수보다 더 많은 개수가 나오는 것을 알 수 있다. 그러므로 i++을 해서 크로아티아 알파벳을 찾으면 1번처럼 갈 수 있게 i++을 해주도록 하자.
그리고 제출을 했을 때, 런타임 에러(StringIndexOutOfBounds)를 접하게 됐다.
런타임 에러가 발생한 이유를 아래 그림으로 설명하겠다.
char ch = str.charAt(4); >> ch가 c 라는 것을 알게 되었다. 그래서 if문으로 들어가서 str.charAt(i+1)을 하려고 보니까 다음 값이 없는데 뭐냐고 물어보니까 indexout이 발생한 것이다. 그래서 if( i < str.length() - 1) 라는 조건을 주면
if( 4 < 4) 조건 불충족으로 index 4번 뒤에 뭐가 있든 없든 상관없이 if문을 빠져나가고 for문을 종료한다.
for문을 돌리면서 센 cnt를 출력해주면 우리가 원하는 알파벳 개수를 알 수 있다.
○ 결과
○ TMI
항상 IF문을 많이 쓰면 괄호가 많아져서 가독성에 문제가 생기기 때문에 IF문 사용을 자제하려고 했지만 본인의 능력이 IF문을 안쓰면 문제를 풀 수 없었다. 그래도 최대한 한 눈에 알아보기 쉽게 작성하려고 애썼다.
'문제풀이 > 백준' 카테고리의 다른 글
백준 1003. 피보나치 함수(JAVA) (2) | 2022.03.28 |
---|---|
백준 2231. 분해합 (JAVA) (2) | 2022.03.25 |
백준 10989. 수 정렬하기 3(JAVA) (0) | 2022.03.23 |
백준 1065. 한수(JAVA) (0) | 2022.03.22 |
백준 4673. 셀프 넘버(JAVA) (0) | 2022.03.21 |