본문 바로가기
컴퓨터/C, C++

[C/C++] 백준 2941번 C언어

by stdFrog 2022. 5. 24.

백준 2941번

 

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다.

따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.


                         č                      c=
                         ć                      c-
                        dž                      dz=
                         đ                      d-
                        lj                      lj
                        nj                      nj
                         š                      s=
                         ž                      z=

 

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다.

단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

 

dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다.

lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

 

첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.

 

단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.

 

입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

 

#include <stdio.h>

int strlen2(char *ar){
        int i;
        for(i=0; *(ar+i); i++){;}
        return i;
}

int main()
{
        char ar[100];
        scanf("%s", ar);
        int N=strlen2(ar);
        
        for(int i=0; i<strlen2(ar); i++){
                if(ar[i]=='='){
                        N--;
                        if(ar[i-1]=='z'&&ar[i-2]=='d'){
                                N--;
                        }
                }
                if(ar[i]=='-'){
                        N--;
                }
                if(ar[i]=='j'){
                        if(ar[i-1]=='l' || ar[i-1]=='n'){
                                N--;
                        }
                }
        }
        printf("%d\n", N);
}

/*
	입력을 "c=c-jjljnjs=z=dz=z=d-" 이라고 가정하면 문자열 길이는 21이고
    	크로아티아 문자는 11개이다.
    
	표에 나와있는 문자외에도 입력받은 모든 문자를 크로아티아 문자로 본다.
*/

 

이 문제 대충 보면 '=' 과 '-', j 만으로도 예외 처리 가능해 보인다

신나서 제출했다가 바로 틀렸다.

 

'-'를 단일로 쓰면 크로아티아 문자가 아니며 '=' 역시 마찬가지이다.

 

그런데 j는 좀 다르다.

l이나 n뒤에 오지 않더라도 크로아티아 문자로 인정된다.

 

'-'는 예외 없이 바로 차감하면 되고 '='는 'dz='에 대해서만 따로 처리해주면 된다.

'j'는 단일로 쓰여도 크로아티아 문자로 보기 때문에 l과 n의 뒤에 위치했을 때만 예외 처리한다.

반응형

'컴퓨터 > C, C++' 카테고리의 다른 글

[C/C++] 백준 2292번 C언어  (0) 2022.05.26
[C/C++] 백준 1712번 C언어  (0) 2022.05.26
[C/C++] 백준 2675번 C언어  (0) 2022.05.21
[C/C++] 백준 10809번 C언어  (0) 2022.05.19
[C/C++] 백준 11720번 C언어  (0) 2022.05.19

댓글