본문 바로가기
I am a developer

백준 / Python / 5622 / 다이얼 / 문제풀이

by Echinacea 2023. 5. 4.
반응형

문제 설명

문제의 포인트

  • 문제를 꼼꼼하게 읽고(^^) 함정이 없는지(PQRS, WXYZ) 두 번 검토해야 한다.
  • 값이 1에서 시작하는지, 0에서 시작하는지 꼼꼼히 따질 필요가 있다 - 하지만 보통 1로 기준을 두고 더하거나 빼는게 좋을 듯하다.

문제 풀이 방법

  1. 첫 줄에 문자열을 입력받되, 처음부터 리스트 형태로 받으면 편하다.

    
     word = list(input())
     print(word)
    
     ----------------------------------console------------------------------------
     UNUCIC
     ['U', 'N', 'U', 'C', 'I', 'C']
    
  2. 다이얼에 입력된 알파벳은 A-Z 전부를 받아 세 글자씩(마지막은 네 글자) 끊을 수 있지만, 이 문제의 함정 첫번째… WXYZ 말고 PQRS가 뜬금없이 네 글자라 처음부터 세 글자씩 끊으면 안되고, 하드코딩으로 다이얼에 맞는 문자열을 리스트에 넣어줘야 한다.

     alphabet = ["ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"]
  3. 첫 줄에 입력받은 단어를 숫자로 변환해야 하는데, 파이썬 리스트 기능에는 replace 함수가 없기 때문에 처음에 입력한 문자열의 길이와 같은 크기의 새 리스트를 입력받으면 된다. (여기서 첫 번째 줄과 세 번째 줄)

     testList = []
     for i in range(len(word)):
         testList.append(word[i])
         for j in range(len(alphabet)):
             if word[i] in alphabet[j]:
                 testList[i] = j+2
  4. 입력받은 word 리스트의 각 문자들이 alphabet에 존재하는지 보려면 파이썬의 if ~ in 문을 활용하면 된다(위 코드의 다섯 번째 줄)

  5. word의 각 요소들이 alphabet에 존재하는지 한 개씩 보려면 for 문을 두 번 돌려서 [word길이*alphabet길이]만큼 탐색해야 한다. (위 코드의 두 번째, 네 번째 줄)

  6. 다이얼을 돌리면 1번은 2초가 걸리는데, 두 번째 함정으로 1번에는 알파벳이 적혀 있지 않다. 그래서 영어 문자열을 입력받았을 때 다이얼은 1이 아니라 무조건 2번(3초 소요)부터 돌아가야 하기 때문에 인덱스가 0부터 시작하는 파이썬 특성상 j 값에 2를 더해줘야 한다.

  7. 마지막으로 시간을 계산할 때, 다이얼 숫자가 n이면 n+1초씩 소요된다고 했으므로 각 다이얼의 소요시간에 1씩 더해줘야 한다.

time = 0
for i in testList:
    time += i+1
print(time)

정답 코드

word = list(input())
alphabet = ["ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"]

testList = []
for i in range(len(word)):
    testList.append(word[i])
    for j in range(len(alphabet)):
        if word[i] in alphabet[j]:
            testList[i] = j+2
time = 0
for i in testList:
    time += i+1
print(time)
반응형

댓글