#53. 백준 5622번 문제 풀이: 다이얼 문제 원본 보기
다이얼 전화를 건다. 1 을 거는데 시계방향으로 1초 돌아오는데 1초, 즉 2초가 걸린다. 2, 3.. 0 번 번호는 멀수록 1초씩 더 걸린다. 각 숫자에는 알파벳이 할당되어 있는데, 알파벳으로 번호를 외워서 전화를 걸수도 있습니다. 1: 알파벳 없음 2: ABC 3: DEF 4: GHI 5: JKL 6: MNO 7: PQRS 8: TUV 9: WXYZ 0: 없음 알파벳 단어가 UNUCIC 라면 868242 가 된다. 단어가 주어졌을 때 전화를 거는 최소시간을 구하는 프로그램을 작성하라.
입력/출력
--입력--
WA
--출력--
13
--입력--
UNUCIC
--출력--
36
문제풀이+해설
알파벳에 해당하는 숫자는 배열에 알파벳 순서에 따른 번호를 넣어두고 찾는다.
ns = "22233344455566677778889999";
    //ABCDE..
문자는 아스키코드값이며 ABC 순서대로 위치하므로 B의 경우 'A'-'A'는 0, 'B'-'A' 를 빼면 1, ..이 된다.
이 원리로 문자에 해당하는 배열값을 뽑아낼 수 있다.

각 번호별 걸리는 시간은 아래와 같다.
1 을 거는데 걸리는 시간은 2초
2 를 거는데 걸리는 시간은 2초 +1초 = 3초
3 은 4초, 4는 5초
즉 n번호를 거는데 걸리는 시간은 n+1초가 된다.
code sol.
#include <stdio.h>
#include <string.h>

int main() {
  int i, l, cn, n, sec = 0;
  char ns[] = "22233344455566677778889999";
  // ABC 에 해당하는 순서로 있다고 가정하고 전화번호를 세팅.
  char wd[16];
  scanf("%s", wd); // 전화번호 알파벳단어를 입력받는다
  sec = 0; // 걸린 시간, 초기값 0
  l = strlen(wd); // 단어길이
  for(i = 0; i < l; i++) {
    cn = wd[i]-'A'; // 한 글자씩 문자를 인덱스 숫자로 변경해 준다.
    n = ns[cn]-'0'; // 문자숫자를 정수로 변경. 예) '1'-'0' = 1
    sec += n + 1; // 걸리는 시간( 번호+1초)를 더해줌
  }
  printf("%d", sec); // 걸린 시간을 출력
  return 0;
}
© 코드솔 - CodeSol. All Rights Reserved.