해바

5622) 7. 문자열 : 다이얼(BAKA) 본문

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;
}
Comments