[백준] 2941. 크로아티아 알파벳
2023. 5. 16. 08:51ㆍ코딩테스트/백준
[문제]
https://www.acmicpc.net/problem/2941
2941번: 크로아티아 알파벳
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=
www.acmicpc.net
[풀이]
하나하나 비교했는데, 코드가 너무 깔끔하지 않다. 더 나은 코드가 없을까 하고 다른 사람들이 제출한 코드를 하나하나 뜯어봤다.
[내 코드]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char s[101];
int i, count=0;
scanf("%s", s);
for (i = 0; i < strlen(s); i++) {
count++;
if (i == strlen(s) - 1)
break;
if (s[i] == 'c') {
if (s[i + 1] == '=' || s[i + 1] == '-')
i++;
}
if (s[i] == 'd') {
if (s[i + 1] == '-')
i++;
else if (s[i + 1] == 'z' && s[i + 2] == '=')
i+=2;
}
if (s[i] == 'l' && s[i + 1] == 'j')
i++;
if (s[i] == 'n' && s[i + 1] == 'j')
i++;
if (s[i] == 's' && s[i + 1] == '=')
i++;
if (s[i] == 'z' && s[i + 1] == '=')
i++;
}
printf("%d", count);
}
[더 나은 코드]
당연하게도 더 나은 풀이방법이 있었다 !
더 적게 등장하는 기호를 활용하기..
다시 짰다.
바꾸는 김에 계산하는데 시간이 많이 걸린다는 strlen(s)도 len 변수에 저장해서 사용했다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char s[101];
int i, count=0, len;
scanf("%s", s);
len = strlen(s);
for (i = 0; i < len; i++) {
count++;
if (s[i] == '=') {
if (s[i - 1] == 'c' || s[i - 1] == 's')
count--;
if (s[i - 1] == 'z') {
count--;
if (s[i - 2] == 'd')
count--;
}
}
else if (s[i] == '-') {
if (s[i - 1] == 'c' || s[i - 1] == 'd')
count--;
}
else if (s[i] == 'j') {
if (s[i - 1] == 'l' || s[i - 1] == 'n')
count--;
}
}
printf("%d", count);
}
... 왜 더 나아지지 않은 것 같지?
여하튼 효율적으로 코드를 짜기 위한 다양한 방법을 생각하는 능력을 키우자.
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 15894. 수학은 체육과목 입니다 (0) | 2023.07.08 |
---|---|
[백준]2869. 달팽이는 올라가고 싶다 (0) | 2023.07.03 |
[백준]1193. 분수찾기 (0) | 2023.07.02 |
[백준] 1316. 그룹 단어 체커 (0) | 2023.05.16 |
[백준] 1157. 단어공부 - 시간초과 (0) | 2023.05.16 |