김펭귄 관찰일기

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

 

2941번: 크로아티아 알파벳

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

www.acmicpc.net

 

 

1. 문제

 


💡 문제

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

크로아티아 알파벳변경

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

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

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

💡 입력

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

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

💡 출력

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

 

 

2. 풀이


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

int main ()
{
	int i, jump;
	int result = 0;
	char word[101] = {0,};
	scanf ("%s", word);
	int len = (int)strlen (word);


	for (i = 0; i < len;)
	{
		// 여기서 int jump는 for문 증감식을 대체하기 위한 변수.
        jump = 0;
		
        // 단어가  'c=' / 'c-'일 경우 인덱스를 두 자리 건너뛸 것이다.
		if (word[i] == 'c' && (word[i + 1] == '=' || word[i + 1] == '-')) jump = 2;

		// 단어가  'dz='일 경우 인덱스를 세 자리 건너뛸 것이다.
		else if (word[i] == 'd' && (word[i + 1] == 'z' && word[i + 2] == '=')) jump = 3;
		
        // 단어가  'd-'일 경우 인덱스를 두 자리 건너뛸 것이다.
		else if (word[i] == 'd' && (word[i + 1] == '-')) jump = 2;

		// 단어가  'lj' / 'nj'일 경우 인덱스를 두 자리 건너뛸 것이다.
		else if (word[i + 1] == 'j' && (word[i] == 'l' || word[i] == 'n')) jump = 2;

		// 단어가  's=' / 'z='일 경우 인덱스를 두 자리 건너뛸 것이다.
		else if (word[i + 1] == '=' && (word[i] == 's' || word[i] == 'z')) jump = 2;

		// 위에서 체크되지 않은 문자가 'a'부터 'z' 사이일 경우 인덱스를 한 자리 건너뛸 것이다.
		else if ('a' <= word[i] && word[i] <= 'z') jump = 1;

		// 인덱스를 건너뛸 경우 (jump > 0), 이는 한 문자로 간주하기에 result 값에 1을 증감한다.
		if (jump > 0)
		{
			result++;
			i += jump;
		}
	}

	printf ("%d", result);
}

 

 

3. 메모


 문제를 푸는데 무려 15일이 걸렸다.. (사실 본가에서 서울로 이사해서 한 동안 공부할 시간이 없었던 것도 크지만.. >_ㅇ) 처음에 2차원 배열을 만들어 접근할 생각을 했다. 크로아티아 알파벳을 각 2차원 배열에 넣어 인덱스 0번을 비교하는 식으로 코딩을 짜보았는데, 가볍게 퇴짜를 맞아버렸다.. ㅠㅜ 그렇게 틀린 부분도 없었던 것 같은데, 쳇. 나중에는 다시 한 번 2차원 배열로 풀어볼 것이다.

profile

김펭귄 관찰일기

@Penguin.Kim