본문 바로가기
CS/Algorithm

[알고리즘][문자열][2941] 크로아티아 알파벳

by 별토끼. 2018. 4. 19.
반응형

[알고리즘][문자열][2941] 크로아티아 알파벳



*문제

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



*풀이

 예외상황을 생각하지 못해서 처음부터 지우고 다시 풀었던 문제. 다양한 케이스들을 고려할 줄 알아야겠다. test case는 http://hsin.hr/coci/archive/2008_2009/ 에서 참고하여 추가적인 테스트를 진행하고 부족한 사항을 충족시켰다.

 1. 문자열의 길이만큼 count값을 넣는다.

 2. -/=/i 세 개중 하나일 경우 앞 문자를 검사한다.

 3. 만약 앞 문자들이 각각 크로아티아 알파벳에 해당되면 카운트 값을 깎는다. 


*코드

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
40
41
42
43
44
45
package algorithm_String;
 
import java.util.Scanner;
 
public class q_2941 {
 
    public static void main(String[] args) {
        /*
         * 1. 문자열을 입력받는다.
         * 2. 입력받은 문자를 쪼개고 count값을 문자 길이로 지정
         * 3. 해당 문자열을 for문으로 검사한다.
         * 4. =/-/j 로 끝날 경우 앞의 문자를 검사해준다.
         * 5. =의 경우 3개의 문자로 구성되는 크로아티아어도 고려해줘야 한다.
         * 6. 해당 될 경우 count값을 줄인다.
         */
        Scanner scan = new Scanner(System.in);
        char[] arr = scan.nextLine().toCharArray();
        int count = arr.length;
        for(int i=1;i<arr.length;i++) {
            int tmp = (int)arr[i];
            if(tmp==61) {
                if(arr[i-1]=='c'||arr[i-1]=='s') {
                    count--;
                }else if(arr[i-1]=='z') {
                    if(i>1 && arr[i-2]=='d') {
                        count-=2;
                    }else 
                        count--;
                }
            }else if(tmp==45) {
                if(arr[i-1]=='c'||arr[i-1]=='d') {
                    count--;
                }
            }else if(tmp==106) {
                if(arr[i-1]=='n' || arr[i-1]=='l') {
                    count--;
                }
            }
            
        }
        System.out.println(count);
    }
 
}
 
cs


반응형

댓글