백준 단계별

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

pullwall 2023. 1. 19. 14:34
728x90

우선적으로 필요한 것은 단어를 입력받고 알파벳 갯수를 카운팅하는 변수이다.

 

Scanner sc = new Scanner(System.in);
		
String word = sc.nextLine();
		
int cnt = 0;

 

이후 단어의 길이만큼 반복문을 돌며 알파벳을 검사한다. 가장 큰 틀로 아래와 같은 구조를 만들 수 있다.

첫번째 반복할 때는 charAt(0)이 작동하여 첫번째 글자를 검사하게 된다.

for(int i=0 ; i<word.length() ; i++){
	char ch = word.charAt(i);
    }

 

다음으로 위 반복문 안에 들어갈 알고리즘을 짤 차례이다.

우리가 고려해야 할 것은 알파벳 표에 주어진 것 뿐이다.

c를 인식했을 때 그 다음 글자가 = 인지 -인지 검사하고

d가 들어왔을 때 그 다음 글자가 z=인지 -인지 검사하고..

해야 하지만 여기서 문제가 발생한다.

 

c를 인식했을 때 c가 마지막 글자에 있다면 그 다음 글자를 검사하는 과정에서 오류가 발생하게 된다.

이 문자열은 c에서 끝나기 때문에 다음 문자를 불러올 수 없기 때문이다.

 

따라서 c= 혹은 c- 를 검사할 땐 i<word.length()-1 을 붙여 다음에 올 글자가 있는 경우에만 검사해줘야 한다.

아닌 경우는 그냥 알파벳 c 자체로 흘려서 아무 if문도 통과하지 않게 만들면 된다.

이 경우에 for문 맨 끝애 cnt++를 설정하여 아무 if문도 통과하지 않았을 경우, 즉 위 표에 해당하지 않는 경우에

카운트를 하나 증가시켜야 할 것이다.

 

 

최종 코드

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String word = sc.nextLine();
		
		int cnt = 0;
		
		for(int i=0 ; i<word.length() ; i++) {
			char ch = word.charAt(i);
			
			if(ch=='c') {
				if(i<word.length()-1) { //마지막 자리에 c가 올 경우 발생하는 에러를 방지
					if(word.charAt(i+1)=='=') {
						i++;
					}
					else if(word.charAt(i+1)=='-') {
						i++;
					}
				}
			}
			
			else if(ch=='d') {
				if(i<word.length()-1) { //dz를 검사해야 하는데 d가 마지막에 위치하면 안되니까
					if(word.charAt(i+1)=='z') {
						if(i<word.length()-2) { //dz=검사를 위해
							if(word.charAt(i+2)=='=') { //dz=
								i+=2;
							}
						}
					}
					else if(word.charAt(i+1)=='-') { //d-
						i++;
					}
				}
			}
			
			else if(ch == 'l') {
				if(i<word.length()-1) {
					if(word.charAt(i+1)=='j') { //lj
						i++;
					}
				}
			}
			
			else if(ch == 'n') {
				if(i<word.length()-1) {
					if(word.charAt(i+1)=='j') { //nj
						i++;
					}
				}
			}
			
			else if(ch == 's') {
				if(i<word.length()-1) {
					if(word.charAt(i+1)=='=') {
						i++;
					}
				}
			}
			
			else if(ch == 'z') {
				if(i<word.length()-1) {
					if(word.charAt(i+1) == '=') {
						i++;
					}
				}
			}
			cnt++; //다음 문자 건너뜀 =이거나 -일 경우에 한 문자로 봐줬기 때문
		}
		System.out.println(cnt);
	}
}

 

728x90