백준 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 |
댓글