[PYTHON] 5622 다이얼 - dictionary로 푸는법/ list로 푸는법

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

     

    5622번: 다이얼

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

    www.acmicpc.net

    문제 풀이

    • 숫자 1이 2초가 걸리기 때문에 숫자 2는 3초가 걸린다.
    • 숫자 2부터 문자가 시작이고 문자를 배열에 담을거니깐 index는 0이다.
    • 결론은 숫자 2는 index가 0이고 3초가 걸리고 'ABC' 를 의미하므로
    • 딕셔너리를 만들러 key로는 문자를 넣고 value값으로 초를 넣어 계산한다.
      • index+3을 해주어 초를 계산해준다.
    • 입력값 문자를 받아 딕셔너리의 key값에 들어있으면 value값인 초를 누적합하여 최종 걸린 시간을 출력해준다.

    solution

    import sys
    alphabet = ['ABC','DEF','GHI','JKL','MNO','PQRS','TUV','WXYZ']
    dial_dict = {alphabet[i] : i+3 for i in range(len(alphabet))}
    # {'ABC': 3, 'DEF': 4, 'GHI': 5, 'JKL': 6, 'MNO': 7, 'PQRS': 8, 'TUV': 9, 'WXYZ': 10}
    
    word = sys.stdin.readline().strip() # 'ADE'
    
    # 설명/ 예시 첫번째 순회
    
    result = 0
    for a in dial_dict: # 딕셔너리의 반복은 key가 순회함 / a = 'ABC'
      for w in word:  # w = 'A'
        if w in a: # 'A'가 'ABC'에 있으므로
          result += int(dial_dict[a]) # 'ABC'의 value값인 3을 result에 더해줌
    
    print(result)

    다른 풀이

    import sys
    alphabet = ['ABC','DEF','GHI','JKL','MNO','PQRS','TUV','WXYZ']
    
    word = sys.stdin.readline().strip() # WA
    
    result = 0
    for i in range(len(word)): # word의 길이만큼 순회함 i = 0 / 1
      for j in alphabet: # alphabet의 리스트를 순회함
        if word[i] in j: # word[0] = W가 alphabet 요소안에 있다면,
          result += alphabet.index(j)+3 # 그 요소의 인덱스 번호에 3초를 더해줌
    print(result)
    • 굳이 숫자가 의미하는 문자와 초를 딕셔너리로 만들 필요가 없다고 느꼈습니다. for문 안에 돌릴때 index에서 바로 +3을 해줘도 됩니다.
    • 하지만 그래도 딕셔너리에 넣고자 한 것은 문자가 의미하는 초를 의미해 조금 더 가독성 있게 짜고 싶었기 때문입니다.

    댓글