문제 풀이

[백준] 2941번: 크로아티아 알파벳 - JAVA(자바)

auyeol 2023. 8. 10. 17:48
728x90

 

문제

 

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

 

2941번: 크로아티아 알파벳

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=

www.acmicpc.net

 

단어를 입력받은 다음 알파벳의 개수를 세는 문제이다.

 

크로아티아 알파벳을 포함해서 개수를 세야하는데, 크로아티아 알파벳은 표와 같이 변경되어 입력된다. 

 

'c='가 입력되는 경우 1개의 알파벳으로 인식해야하며, 'dz='도 동일하게 1개의 알파벳으로 인식해야한다.

 

 

 

 

 

 

 

입력                                    	출력
ljes=njak					6

입력                                    	출력
ddz=z=						3

입력                                    	출력
dz=ak						3

------------------------------------------------------------------------------------------------------------------

 

풀이

Scanner를 이용하여 단어를 문자열로 입력받은 뒤, 단어의 개수를 셀 count와 알파벳의 다음알파벳을 비교하기 위한 next_char 변수를 선언하였다.

 

for문을 이용하여 단어의 길이만큼 char형으로 한 글자씩 변환시켰다.

 

if문을 이용하여 c, d, l, n, s, z가 온 경우 다음 문자를 확인하도록 str.charAt(i+1)을 하였다.

 

제시된 표를 보면 c 뒤에는 =,- 가 오는경우 1개의 문자로 인식해야 하기 때문에 str.charAt(i+1)이 =, - 인 경우 i++를 하여 count하지 않고 바로 다음 알파벳으로 넘어가게 하였다.

 

d는 'dz=', 'd-' 으로 3단어로 이루어진 크로아티아 알파벳이 존재하는데, d > z > =을 순서대로 if문을 이용하여 비교하여 맞는 경우 i +=2 를 하여 다음 알파벳으로 넘기게 하였다.

 

마지막으로, Eclipse IDE에서는 테스트 케이스만 입력했을 때 제대로 동작하는데 제출하기를 하면 '런타임 에러 (StringIndexOutOfBounds)'가 계속 나오길래 다음 단어를 가져오는 next_char = str.charAt(i+1) 이 부분에서 마지막에 단어가 없는데 가져오려고 해서 발생하는 듯 하여 모든 if문 안에 str.length()-1, str.length() -2의 조건을 추가적으로 넣었다.

 

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		
		String str = sc.next();
		int count = 0;
		char next_char;
		sc.close();
		
		for(int i=0;i<str.length();i++) {
			char c = str.charAt(i);
			
			if(c=='c') {
				if(i<str.length()-1) {
					next_char = str.charAt(i+1);
					if(next_char == '=' || next_char == '-') {
						i++;
					}
				}
			}
			else if(c=='d') {
				if(i<str.length()-1) {
					next_char = str.charAt(i+1);
					if(next_char == 'z') {
						if(i<str.length()-2) {
							next_char = str.charAt(i+2);
							if(next_char == '=') {
								i += 2;
							}
						}
					}
					else if(next_char == '-') {
						i++;
					}
				}
			}
			else if(c=='l' || c=='n') {
				if(i<str.length()-1) {
					next_char = str.charAt(i+1);
					if(next_char == 'j') {
						i++;
					}
				}
			}
			else if(c=='s' || c=='z') {
				if(i<str.length()-1) {
					next_char = str.charAt(i+1);
					if(next_char == '=') {
						i++;
					}
				}
			}
			count++;
		}
		System.out.println(count);
	}
}

 

 

 

728x90