반응형
https://www.acmicpc.net/problem/5622
문제
입력
첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 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)
반응형
'Algorithm > Problem Solving' 카테고리의 다른 글
[Python] 백준/BOJ - 2675번: 문자열 반복 (0) | 2022.04.03 |
---|---|
[Python] 백준/BOJ - 7568번: 덩치 (0) | 2022.03.30 |
[Python] 백준/BOJ - 11721번: 열 개씩 끊어 출력하기 (0) | 2022.03.24 |
[Python] 백준/BOJ - 1316번: 그룹 단어 체커 (0) | 2022.03.23 |
[Python] LeetCode - 841. Keys and Rooms (0) | 2021.12.08 |