https://www.acmicpc.net/problem/2941
1. 문제
💡 문제
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
크로아티아 알파벳변경
č | c= |
ć | c- |
dž | 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차원 배열로 풀어볼 것이다.
'프로그래밍 > 백준 알고리즘' 카테고리의 다른 글
[C] 손익분기점 (백준 알고리즘 1712번) (0) | 2021.08.18 |
---|---|
[C] 그룹 단어 체커 (백준 알고리즘 1316번) (0) | 2021.08.16 |
[C] 다이얼 (백준 알고리즘 5622번) (0) | 2021.07.26 |
[C] 상수 (백준 알고리즘 2908번) (0) | 2021.07.24 |
[C] 단어의 개수 (백준 알고리즘 1152번) (0) | 2021.07.24 |