[백준] 2941. 크로아티아 알파벳

문제

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

풀이

문자열을 입력 받은 후 그 문자열 안에 크로아티아 알파벳이 있는지 확인 후, 크로아티아 알파벳의 개수를 구하는 문제.
크로아티아 알파벳인지 확인하기 위해 입력 받은 str을 charAt으로 하나씩 살펴봐야 한다.
ch가 c일 경우 그 뒤에 오는 문자, 즉 charAt(i+1)이 '=' 이거나 '-'라면, 그 문자는 c와 하나의 문자로 봐야 하기 때문에 i++을 해서 i+1을 탐색하지 않도록 해준다.
dz=일 경우에는 i+=2를 해주면 된다.
다른 문자열도 이런식으로 해주면 되는데, 지금 상태로 컴파일을 하면 StringIndexOutOfBoundsException가 발생한다. 즉 index 범위를 벗어났다는 것인데 예를 들어 문자열의 끝이 c로 끝나는 경우 i+1을 탐색 할 수 없기 때문에 발생하는 것이다.
이것을 방지하기 위해 if문으로 제약을 걸어줘야 한다.
ch가 c이면서 i가 str.length() -1 보다 작을 경우에만(마지막 index가 아닐 경우에만) charAt(i+1)을 할 수 있도록 만들어 준다.
dz=일 경우에는 str.length() -2를 해주면 된다.
lj와 nj, s=와 z=는 뒷 문자열이 같기 때문에 하나의 if문으로 묶어서 코드 길이를 줄여보자.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// title : 크로아티아 알파벳
public class Q_2941 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		
		int count = 0;
		int len = str.length();
		
		for(int i = 0; i < str.length(); i++) {
			char ch = str.charAt(i);
			
			if(ch == 'c' && i < len - 1) {
				if(str.charAt(i+1) == '=' || str.charAt(i+1) == '-') {
					i++;
				}
			}
			else if(ch == 'd' && i < len - 1) {
				if(str.charAt(i+1) == 'z' && i < len - 2) {
					if(str.charAt(i+2) == '=') {
						i += 2;
					}
				}else if(str.charAt(i+1) == '-') {
					i++;
				}
			}
			else if((ch == 'l' || ch == 'n') && i < len - 1) {
				if(str.charAt(i+1) == 'j') {
					i++;
				}
			}
			
			else if((ch == 's' || ch == 'z') && i < len - 1) {
				if(str.charAt(i+1) == '=') {
					i++;
				}
			}
			count++;
		}
		System.out.println(count);
	}
}

좋은 웹페이지 즐겨찾기