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 |