알고리즘/백준 알고리즘

[java] 백준 알고리즘 2941번 크로아티아 알파벳 풀이

희랍인 조르바 2018. 5. 25. 14:44



글씨들을 걸러야 할 것 같은데 


어떻게 처리할지 생각해봤다.


일단 모든 알파벳에 대해 한글자씩 추가하고, 크로아티아 알파벳으로 해당되는 문자는 하나의 알파벳으로 고려하니까


그만큼 빼주면 되겠다고 생각했다. 



1. 특수문자 '-'가 붙는 글자가 나오면 앞에 어떠한 알파벳이든 


앞의 알파벳과 함께 크로아티아 알파벳이 되므로


특수문자 '-'로 추가된 +1을 다시 -1을 해준다.



2. 특수문자 '='가 붙는 것은 기본적으로 어떠한 알파벳이 앞에 와도 크로아티아 알파벳이 되므로


-1을 해준다.


그러나, 'dz=' 의 경우는 3개의 문자가 1개의 문자로 취급하므로 -2가 되어야한다.



3. 'nj' 와 'lj'의 경우, 하나의 크로아티아 알파벳이므로 -1을 해준다.




* 풀이 소스


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class Baekjoon2941 {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        String word = br.readLine();
        int alphabetCount =0;
        
        for(int i=0; i<word.length(); i++) {
            alphabetCount++;
            
            if(word.charAt(i) == 45) { // 특수문자 '-'가 붙을 경우,
                alphabetCount -= 1;
                
            }else if(word.charAt(i) == 61) { // 특수문자 '='가 붙을 경우,
                alphabetCount -= 1;
                
                /* 특수문자 '='가 붙고 앞에서 dz가 붙는 즉, 'dz=' 문자의 경우, */
                if(String.valueOf(word.charAt(i-1)).equals("z"&& String.valueOf(word.charAt(i-2)).equals("d")) {
                    alphabetCount -= 1;
                }    
                
                /* 'lj'와'nj'의 경우, */
            }else if(String.valueOf(word.charAt(i)).equals("j"&& 
                    (String.valueOf(word.charAt(i-1)).equals("l"|| String.valueOf(word.charAt(i-1)).equals("n") )){
                alphabetCount -= 1;
            }
                
        }
        bw.write(String.valueOf(alphabetCount));
        bw.flush();
            
    }
 
}
 
 
 
cs