■ 5622번 다이얼 문제
■ 코드 풀이
다이얼 문제를 3가지 풀이법으로 풀어보겠습니다. 먼저, if문을 활용한 직관적인 풀이법입니다. 문자열을 S에 입력 받고, S를 알파벳 하나씩 for loop를 통해 받으면서 해당 단어가 몇 초가 걸리는지 합산하는 코드입니다. 소요 시간은 40ms이고 코드 길이는 433B입니다. 아래 코드를 list를 활용하여 바꿔보겠습니다.
S = input()
time = 0
for s in S:
if s in "ABC":
time += 3
elif s in "DEF":
time += 4
elif s in "GHI":
time += 5
elif s in "JKL":
time += 6
elif s in "MNO":
time += 7
elif s in "PQRS":
time += 8
elif s in "TUV":
time += 9
elif s in "WXYZ":
time += 10
elif s in " ":
time += 2
else:
time += 11
print(time)
아래는 list문을 활용한 코드입니다. 위의 코드보다 깔끔해 보이지 않나요? 코드 길이는 203B로 위의 코드 대비 절반 정도로 줄었지만 소요 시간은 40ms에서 44ms로 오히려 증가했습니다.
LS = ["ABC","DEF","GHI","JKL", "MNO", "PQRS", "TUV", "WXYZ"]
S = input()
time = 0
for s in S:
for idx, ls in enumerate(LS):
if s in ls:
time += (idx + 3)
print(time)
마지막으로 dict를 활용해서 풀어볼 수 있습니다. 아래의 코드처럼 문자열과 소요 시간을 key-value 형태로 묶어두면 되는데요. 코드 길이는 203B로 위의 list를 활용한 풀이법과 동일하지만 소요 시간이 무려 72ms로 압도적으로 느리네요. 코딩 테스트에서는 dict 자료형 사용을 고민해봐야 할 것 같습니다.
LS_dict = {"ABC":3,"DEF":4,"GHI":5,"JKL":6, "MNO":7, "PQRS":8, "TUV":9, "WXYZ":10}
S = input()
time = 0
for s in S:
for k,v in LS_dict.items():
if s in k:
time += v
print(time)
'코딩 테스트 > Python_백준' 카테고리의 다른 글
[백준/Python] 2444번 별 찍기-7 문제 (0) | 2023.03.24 |
---|---|
[백준/Python] 11718번 그대로 출력하기 문제 (0) | 2023.03.24 |
[백준/Python] 2908번 상수 문제 (0) | 2023.03.23 |
[백준/Python] 2675번 문자열 반복 문제 (0) | 2023.03.22 |
[백준/Python] 11720번 숫자의 합 문제 (0) | 2023.03.22 |
댓글