본문 바로가기

[BOJ] - JAVA

[백준] 2941 : 크로아티아 알파벳 JAVA 풀이

전체 문자열의 글자수에서 크로아티아 알파벳의 개수를 빼는 방식으로 풀었다. 

크로아티아 알파벳의 개수는 크로아티아 알파벳이 변경된 형태의 마지막 글자가 '=', '-', 'j' 셋 중 하나인 점을 이용했다.

 

입력받은 문자열을 처음부터 체크하는 것이 아니라,

인덱스가 1인 두 번째 문자부터 읽고 '=', '-', 'j' 중 하나라면 그 앞 글자를 검사하는 방식이다.

 

 

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

public class Main{
    public static void main(String[] args) throws IOException{
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine(); 
        int cnt=0; // 크로아티아 알파벳의 개수
       
        for(int i=1;i<str.length();i++){
            char c=str.charAt(i); // 입력받은 문자열의 두 번째 글자부터 하나씩 가져옴
            
            if(c=='='){
            // c= 또는 s= 라면 크로아티아 알파벳 개수 +1
                if(str.charAt(i-1)=='c'||str.charAt(i-1)=='s'){ 
                    cnt++;
                }
                
                else if(str.charAt(i-1)=='z'){
                // dz=인지 검사하기 위해서는 '='의 앞앞글자(i-2)를 검사해야 하는데
                // i가 1일 때 i-2를 해 인덱스 범위를 넘어가는 경우를 방지하기 위해서
                // i>=2를 추가했음
                    if(i>=2&&str.charAt(i-2)=='d'){
                        cnt++; // dz=는 특수하게 3글자로 이루어져있으므로 개수를 1 더 증가시킴
                    }
                    cnt++; // z=일 때
                }
            }
            // c- 또는 d-일 때
            else if(c=='-'){
                if(str.charAt(i-1)=='c'||str.charAt(i-1)=='d'){
                    cnt++;
                }
            }
            // lj 또는 nj일 때
            else if(c=='j'){
                if(str.charAt(i-1)=='l'||str.charAt(i-1)=='n'){
                    cnt++;
                }
            }
        }
       System.out.print(str.length()-cnt);
    }
}