본문 바로가기
코딩 테스트/Python_백준

[백준/Python] 5622번 다이얼 문제

by 모두의 케빈 2023. 3. 23.

■ 5622번 다이얼 문제

 

출처: 백준 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)

댓글