본문 바로가기

컴퓨터/백준 알고리즘

백준 알고리즘 2941번: 크로아티아 알파벳 C언어

문제 출처: www.acmicpc.net/problem/2941

 

2941번: 크로아티아 알파벳

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=

www.acmicpc.net

1. 코드

#include <stdio.h>
#include <string.h>

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

2. 문제 해결 방식

입력된 문자의 개수에서 조건에 해당하는 것을 제외시킨 방법이다. 첫 번째 조건은 'lj'와 'nj'가 입력되어 있을 때 총개수에서 1을 뺀다. 그리고 두 번째 조건은 'dz='이 입력되었을 때 1만 빼는데 'dz='같은 경우에는 3글자가 1글자가 되니 2개를 빼야 한다고 생각이 들 텐데 코드를 조금이라도 줄이기 위해 세 번째 조건을 살펴보자.

세 번째 조건은 '=' 혹은 '-'가 입력이 된다면 1을 뺀다. 그렇다면 다시 두 번째 조건으로 돌아가 보자. 두 번째 조건에서는 3글자가 1글자가 되는데 우선 거기서 1을 빼고 'dz=' 같은 경우에 '='이 포함되어 있기에 한 번 더 1이 빼 진다. 그렇기에 총 2라는 수가 빼지는 것이다. 그리고 세 번째 조건을 통해 'c='과  'c-', 'd-', 's=', 'z=' 등을 1씩 뺄 수 있다.

3. 느낀 점

나 같은 경우에는 문자열을 입력 후 문자 개수를 입력하여 조건에 해당하는 것을 제외시켰는데 다른 사람들은 어떠한 생각을 가지며 어떤 코드를 짰는지 궁금해졌다. 내 방식이 매우 단순하기 때문에 나와 다른 색다른 방법에 대해서 알고 싶다. 일단 내가 생각한 것은 이것인데 아무리 생각해도 이것밖에 떠오르지 않기 때문이다.