반응형
DoZZang
Do IT
DoZZang
전체 방문자
오늘
어제
  • Programming
    • Git
    • Web
    • 기타
    • Python
      • CodeUp
    • Math
    • Algorithm
    • Baekjoon
    • C,C++
    • Life
      • 독서
      • Just
      • 영화

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
DoZZang

Do IT

[C] 백준 5622번 : 다이얼
카테고리 없음

[C] 백준 5622번 : 다이얼

2023. 1. 16. 16:48
반응형

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

 

5622번: 다이얼

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.

www.acmicpc.net

코드

    #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);
}

나도 아스키 코드를 활용해볼까 했었는데 그려려면 위와 같이 배열을 만들어야하고 메모리 낭비지 않을까 생각했었는데

사실 이 문제에서 그것을 고민하는 것은 옳지 않았던 것 같다.

다음부턴 최대한 간결하게 짜보는 걸로

반응형
저작자표시 (새창열림)
    DoZZang
    DoZZang
    과정은 힘들지만 성장은 즐겁습니다.

    티스토리툴바