C, C++
5622) 7. 문자열 : 다이얼(BAKA)
Bacha
2019. 8. 15. 02:01
문제
https://www.acmicpc.net/problem/5622
5622번: 다이얼
문제 상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다. 전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다. 숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.
www.acmicpc.net
풀이
else if 란에 양쪽 다 범위를 정해주지 않으면 '\n' 과 같은 것들이 str <= 'F' 범위에 걸리더라. 성적같은 경우는 < 90, <80, <70 ... 이런 식으로 짜도 되던데 이건 왜 걸릴까? 내가 헷갈리는게 있나..
#include "cstdio"
// dial number + 1 = demand time(sec)
// A~C : 1, D~F : 2, ... W~Z : 9
int matchAlp(char str) {
if('A' <= str && str <= 'C') return 2;
else if('D' <= str && str <= 'F') return 3;
else if('G' <= str && str <= 'I') return 4;
else if('J' <= str && str <= 'L') return 5;
else if('M' <= str && str <= 'O') return 6;
else if('P' <= str && str <= 'S') return 7;
else if('T' <= str && str <= 'V') return 8;
else if('W' <= str && str <= 'Z') return 9;
else return -1;
}
int main() {
int time(0);
char alp('\0');
while(alp != '\n') {
alp = getchar();
time += matchAlp(alp) + 1;
}
printf("%d\n", time);
return 0;
}