자바썸
자바랑 썸타는중
자바썸

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
자바썸

자바랑 썸타는중

백준 2941. 크로아티아 알파벳 (JAVA)
문제풀이/백준

백준 2941. 크로아티아 알파벳 (JAVA)

2022. 3. 24. 15:01

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
    '문제풀이/백준' 카테고리의 다른 글
    • 백준 1003. 피보나치 함수(JAVA)
    • 백준 2231. 분해합 (JAVA)
    • 백준 10989. 수 정렬하기 3(JAVA)
    • 백준 1065. 한수(JAVA)
    자바썸
    자바썸

    티스토리툴바