Algorithm/Problem Solving

[Python] 백준/BOJ - 5622번: 다이얼

SH_Roh 2022. 3. 24. 02:08
반응형

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

 

5622번: 다이얼

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.

www.acmicpc.net

문제

입력

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.

출력

첫째 줄에 다이얼을 걸기 위해서 필요한 최소 시간을 출력한다.

예제 입력 1

WA

예제 출력 1

13

풀이

input_str = input()
total = 0
dials = ['C', 'F', 'I', 'L', 'O', 'S', 'V', 'Z']

for s in input_str:
    for i in range(len(dials) - 1):
        if s <= dials[0]:
            total += 3
            break
        elif dials[i] < s <= dials[i + 1]:
            total += i + 4
            break
print(total)

 

파이썬에서 알파벳의 대소비교는 부등호로 가능하기 때문에 그 특성을 이용해보았다.

 

먼저 dials 리스트에 각 번호에서 제일 큰 알파벳을 각각 넣어주었다. 

입력된 문자열을 하나씩 꺼내 for문을 돌면서 dials-1까지 또 for문을 돌았다. (아래에서 i+1까지 체크할 것이기 때문이다.)

 

s가 C보다 작을 경우(A, B, C) 바로 total에 3을 더해주고 break로 빠져나온다.

그렇지 않고 dials[i]보다 크고 dials[i+1]보다 작거나 같다면 total에 i+4를 더해준다.

 

다른 풀이

다른 풀이를 찾아보니 in을 이용하면 더 간단히 풀 수 있었다. in에 대해 살짝 잘못 생각했던 것 같은데 이를 이용하면 더 간단하게 풀 수 있었다.

input_str = input()
total = 0
dials = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']

for s in input_str:
    for dial in dials:
        if s in dial:
            total += (dials.index(dial) + 3)
            break
print(total)
반응형