본문 바로가기

문제풀이

[C언어] 백준 5622 다이얼

#include <stdio.h>

int main(void)
{
    int dif, sec = 0;
    char c;

    while ((c = getchar()) != '\n')
    {
        dif = c - 'A';

        if(dif < 'S'-'A')
            sec += (dif / 3) + 3;
        else if(dif < 'Z'-'A') // from S
            sec += ((dif - 1) / 3) + 3;
        else
            sec += ((dif - 2) / 3) + 3;
    }

    printf("%d", sec);

    return 0;
}
  • switch문을 사용해서 풀 수도 있었겠지만, A-Z까지 26개의 라인을 소비하고 싶지 않았다.
  • S 혹은 Z 이전까지는 하나의 다이얼에 3개의 알파벳이 들어가기 때문에 정수의 나눗셈과 조건을 적당히 활용해 풀었다
  • 문자열로 입력받아 다시 쪼개고 하는 건 효율적이지 않은 것 같아
    getchar로 버퍼에 들어있는 char 하나씩을 꺼내 evaluate한다
    • dif는 알파벳 순서이다.
    • collating sequence에 따라 decimal value가 달라지기 때문에, symbolic char을 직접 넣어준다 ex. 'A'
    • 'S'와 'Z'가 하나 작은 값을 가진 다이얼에 들어가기 때문에, 각각 구하는 식에서 -1해주었다