본문 바로가기

_BOJ/_C , C++

BOJ_2941 : 크로아티아 알파벳 C

반응형

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

 

2941번: 크로아티아 알파벳

문제 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. dž는 무조건 하나의 알파벳으로 쓰이고,

www.acmicpc.net

문제

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.

크로아티아 알파벳변경

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

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

입력

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

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

출력

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

예제 입력 1

ljes=njak

예제 출력 1

6

예제 입력 2

ddz=z=

예제 출력 2

3

예제 입력 3

nljj

예제 출력 3

3

예제 입력 4

c=c=

예제 출력 4

2

 

많이 해멨던 문제이다. 실버문제 각잡고 풀어본건 처음이었음.

처음에 C= 등을 각각의 ASCII 코드값을 구해서 더해서 OVERFLOW 초과하는 값을 가지고 하려고 그랬는데 어림도없었고.

그냥 IF 문을 이용해서 풀었다.

//c=,c-,dz=,d-,lj,nj,s=,z=
//ljes=njak > 6
#include <stdio.h>
#include <string.h>

int main(void){
	char arr[101]={0,};
	fgets(arr,102,stdin);
	//printf("%s",arr);
	int i, temp=0, alphabet=strlen(arr)-1;
	//printf("%d\n",alphabet);
	for(i=0;i<strlen(arr)-1;i++)
	{
		if(arr[i]=='c')
		{
			if(arr[i+1]=='='||arr[i+1]=='-')
			{
				//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
				alphabet--;
			}
		}
		if(arr[i]=='d')
		{
			if(arr[i+1]=='z')
			{
				if(arr[i+2]=='=')
				{
					alphabet--;
					alphabet--;//분리된것으로 안본다함.
					//printf("\n__%c, %c__, %c__",arr[i],arr[i+1],arr[i+2]);
				}
			}
		}
		if(arr[i]=='d')
		{
			if(arr[i+1]=='-')
			{
				//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
				alphabet--;
			}
		}
		if(arr[i]=='l')
		{
			if(arr[i+1]=='j')
			{
				alphabet--;
				//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
			}
		}
		if(arr[i]=='n')
		{
			if(arr[i+1]=='j')
			{
				alphabet--;
				//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
			}
		}
		if(arr[i]=='s')
		{
			if(arr[i+1]=='=')
			{
				alphabet--;
				//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
			}
		}
		if(arr[i]=='z')
		{
			if(arr[i+1]=='=')
			{
				if(arr[i-1]=='d')
				{
					continue;
				}
				else{
					alphabet--;
					//printf("\n__%c, %c__\n",arr[i],arr[i+1]);
				}
			}
		}
	}
	printf("%d",alphabet);
	return 0;
}

 

#include <stdio.h

#include <string.h> //strlen 쓰기위해선 필수.

 

int main(void){

    char arr[101]={0,}; //101칸 선언해주고

    fgets(arr,102,stdin); //101칸에 널문자 하나 더 추가해서 널널하게 입력받고

    //printf("%s",arr);

    int i, temp=0, alphabet=strlen(arr)-1;

    //printf("%d\n",alphabet);

    for(i=0;i<strlen(arr)-1;i++) //strlen 만큼 포문 돌면서

    {

        if(arr[i]=='c') //c 일때 면서

        {

            if(arr[i+1]=='='||arr[i+1]=='-') // = 거나 - 를 받아갈때

            {

                //printf("\n__%c, %c__\n",arr[i],arr[i+1]);

                alphabet--; //그러면 = or - 를 글자로 세면 안되니 알파벳에서 1을 빼준다.

            }

        }

        if(arr[i]=='d')

        {

            if(arr[i+1]=='z')

            {

                if(arr[i+2]=='=')

                {

                    alphabet--; //여기선 두개빼주는데, 알파벳엔 d + z + = 이렇게 세개가 포함되어 있기에 하나 빼주고

                    alphabet--;//하나 더 빼준다. 저 세개를 하나로 센다.

                    //printf("\n__%c, %c__, %c__",arr[i],arr[i+1],arr[i+2]);

                }

            }

        }

        if(arr[i]=='d')

        {

            if(arr[i+1]=='-')

            {

                //printf("\n__%c, %c__\n",arr[i],arr[i+1]);

                alphabet--;

            }

        }

        if(arr[i]=='l')

        {

            if(arr[i+1]=='j')

            {

                alphabet--;

                //printf("\n__%c, %c__\n",arr[i],arr[i+1]);

            }

        }

        if(arr[i]=='n')

        {

            if(arr[i+1]=='j')

            {

                alphabet--;

                //printf("\n__%c, %c__\n",arr[i],arr[i+1]);

            }

        }

        if(arr[i]=='s')

        {

            if(arr[i+1]=='=')

            {

                alphabet--;

                //printf("\n__%c, %c__\n",arr[i],arr[i+1]);

            }

        }

        if(arr[i]=='z')

        {

            if(arr[i+1]=='=')

            {

                if(arr[i-1]=='d') //위에 dz= 에서 z=를 인식해서 두번빼는 대참사가 일어나기에

                {

                    continue; //컨티뉴로 나와준다.

                }

                else{

                    alphabet--;

                    //printf("\n__%c, %c__\n",arr[i],arr[i+1]);

                }

            }

        }

    }

    printf("%d",alphabet);

    return 0;

}

 

 

반응형