백준 5622번 풀이

문제

다이얼에 맞는 번호로 환산해서 돌리는 데 걸리는 시간 구하기.

이게 문제의 다이얼이다. (출처: 백준 5622번 문제)

풀이

일일이 if먹여서 해결한 본인에게 치얼스… 야 이걸 푸네

여담이지만 옛날 핸드폰들은 터치고 뭐고 자판이 쿼티가 아니라 천지인 다 이런거였고 영문자를 실제로 저렇게 다이얼에 할당해뒀다. Z를 입력하려면 입력모드를 영대(영어 대문자)로 하고 9를 네 번 누르면 된다. 그래서 저 시절 핸드폰은 입력 자판이 지금처럼 언어별이 아니라 한글-영대-영소-특문(이모티콘)-숫자순이었다. 피처폰 시절에는 그래서 일본어로 글 쓰려면 컴퓨터로 들어가야 했고(자판 셋업하고…). 지금은 뭐…

내 핸드폰에 한글 영어 일어 독어 임티 자판 있음. 이거면 설명 끝.

import sys
a=sys.stdin.readline()
for i in a:
    print(i)

일단 이렇게 하면 각개로 뽑는 건 된다. 뒷 일이 문제지. 그래서 한참을 고민하다 잠깐 화장실을 갔는데 ASCII 써먹자! 가 생각나서 각 다이얼 별로 맨 뒤 알파벳을 뽑아봤다.

  • 1: 없음
  • 2: C
  • 3: F
  • 4: I
  • 5: L
  • 6: O
  • 7: S
  • 8: V
  • 9: Z
  • 0: Operator

이게 그 측간신 버프냐 아무튼 여기서 실질적으로 0과 1은 할당된 알파벳이 없어서 안 쓰기때문에 다이얼은 2~9까지이고, 시간은 1씩 더한 3~10까지이다.

  • 2: 67
  • 3: 70
  • 4: 73
  • 5: 76
  • 6: 79
  • 7: 83
  • 8: 86
  • 9: 90

그리고 각 다이얼을 ASCII 번호로 변환하면 이렇게 된다. 그럼 어떻게 한다? 범위 잡고 if 착수해야지.

import sys
a = sys.stdin.readline().strip()
time = 0
for i in a:
    if ord(i) <= 67: 
        time += 3
    elif ord(i) <= 70:
        time += 4
    elif ord(i) <= 73:
        time += 5
    elif ord(i) <= 76:
        time += 6
    elif ord(i) <= 79: 
        time += 7
    elif ord(i) <= 83:
        time += 8
    elif ord(i) <= 86:
        time += 9
    else: 
        time += 10
print(time)

각 다이얼별로 끝나는 ASCII 번호가 있고, 그 번호보다 작으면 소요시간을 할당하는 식. 입력은 알파벳이고, 실질적으로 ASCII 번호로 변환하기때문에 범위는 어차피 65~90이다.