반응형
https://www.acmicpc.net/problem/5622
코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int i = 0, sum = 0;
char number[16];
scanf("%s", number);
while (number[i] != NULL) {
switch (number[i]) {
case 'A':
case 'B':
case 'C':
sum += 3;
break;
case 'D':
case 'E':
case 'F':
sum += 4;
break;
case 'G':
case 'H':
case 'I':
sum += 5;
break;
case 'J':
case 'K':
case 'L':
sum += 6;
break;
case 'M':
case 'N':
case 'O':
sum += 7;
break;
case 'P':
case 'Q':
case 'R':
case 'S':
sum += 8;
break;
case 'T':
case 'U':
case 'V':
sum += 9;
break;
default:
sum += 10;
break;
}
i++;
}
printf("%d", sum);
return 0;
}
풀이 전
단순 CASE 분류 문제였다. IF문을 쓸 바에 switch-case문을 쓰는게 코드가 조금 더 효율적이라고 생각했다.
다이얼에 해당하는 문자에 따라 대응하는 수가 정해져 있었기 때문이다.
풀이 후
사실 풀이하면서도 코드가 너무 길어진다는 느낌을 받았다..
어떻게 하면 더 잘할 수 있을까 생각해봤지만 마땅히 떠오르지 않았다.
정답 제출 후 짧은 코드를 보았다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[16];
int time = 0;
int a[26] = { 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8 };
scanf("%s", str);
for (int i = 0; str[i] != '\0'; i++) {
time += a[str[i] - 'A'] + 2;
}
printf("%d", time);
}
나도 아스키 코드를 활용해볼까 했었는데 그려려면 위와 같이 배열을 만들어야하고 메모리 낭비지 않을까 생각했었는데
사실 이 문제에서 그것을 고민하는 것은 옳지 않았던 것 같다.
다음부턴 최대한 간결하게 짜보는 걸로
반응형