본문 바로가기

백준

5622)다이얼

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


문제를 이해하기 위해 입력을 살펴보자.


입력이 UNUCIC 이고 출력이 36이다


어떻게 해서 36이 나왔을까? 

할머니는 숫자를 문자로 기억한다고 했다.


할머니가 기억하는 문자는 위 그림처럼 다이얼 숫자 밑에 있는 문자들을 말한다.


즉 A,B,C가 입력되면 3초를 세어야하고


D,E,F가 입력되면 4초를 세어야 한다.


몇 개만 훑어 보면 규칙이 있는 것처럼 보인다.


A,B,C 0+3

D,E,F 1+3

G,H,I 2+3

J,K,L 3+3

...


그러니까 A부터 순차적으로 0을 포함한 자연수와 대응시켜가면 규칙이 보인다.


0,1,2 0

3,4,5 1

6,7,8 2

...


즉 A,B,C에 대응되는 수를 3으로 나눈 몫과 시간이 어떤 관련이 있다고 볼 수 있다.


예를들어 입력이 ADH라면 출력은 {('A'-'A')/3+3} + {('D'-'A')/3+3} + {('H'-'A')/3+3}가 나와야 한다.


이런 시도는 다이얼 넘버 7에서 의미 없게 만든다.


7과 대응시켜야 할 숫자가 3개가 아니기 때문이다.


그래서 처음 생각했던 방법인 알파벳으로 인덱싱하는 테이블로 접근했다.


문자열의 각 알파벳을 ch에 저장할 때 ch-'A'는 0~25까지 값을 가질 수 있다.

 

A,B,C에 대응되는 인덱스 쌍으로 그 다이얼을 누르기 위해 걸린 시간을 저장한다.


문자열을 각 문자로 분리하고 테이블에 인덱싱해 다이얼을 눌린 시간을 하나씩 더하면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
 
int main() {
    int alpahSecTable[26= {3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,8,9,9,9,10,10,10,10};
    char tempStr[16];
    int tempIndex;
    int time = 0;
    
 
    gets(tempStr);
    for (int i = 0; tempStr[i] != NULL;i++) {
        tempIndex = tempStr[i] - 'A';
        time += alpahSecTable[tempIndex];
    }
    printf("%d\n",time);
 
    return 0;
}
cs


'백준' 카테고리의 다른 글

1874)스택 수열  (0) 2019.01.17
2775)부녀회장이 될테야  (0) 2019.01.16
1316)그룹 단어 체커  (0) 2019.01.15
2920)음계  (0) 2019.01.15
8958)OX 퀴즈  (0) 2019.01.15