티스토리 뷰

반응형

 

[Python] 백준 알고리즘 온라인 저지 5622번 : 다이얼

 

Python3 코드

alpabet_list = ['ABC','DEF','GHI','JKL','MNO','PQRS','TUV','WXYZ']
word = input()

time = 0
for unit in alpabet_list :  
    for i in unit:  # alpabet 리스트에서 각 요소를 꺼내서 한글자씩 분리
        for x in word :  # 입력받은 문자를 하나씩 분리
            if i == x :  # 두 알파벳이 같으면
                time += alpabet_list.index(unit) +3  # time = time + index +3
print(time)

 

 

Python3 코드 풀이

 

1. 코드 풀이의 전체 전인 내용

이번 문제는 랜덤의 문자열이 주어지면 해당 문자열의 각 알파벳마다 걸리는 시간을 합하여 출력하는 문제이다. 문제를 푸는 것은 어렵지 않게 풀 수 있었다. 코드를 작성하는 방법을 여러 가지로 생각해 볼 수 있어서 어떻게 작성할까를 선택하는 것에서 고민을 조금 하게 됐다. 

 

위에 작성한 코드의 경우 먼저 같은 시간이 걸리는 알파벳을 모아 하나의 문자열로 만들고 이 문자열들을 요소로 가진 리스트를 생성하였다. 이후에 for문을 이용해서 다시 문자열과 알파벳을 따로 분리시키면서 입력받은 문자와 비교하는 방식으로 코드를 풀어보았다.

 

2. 코드 상단에서 알파벳 리스트를 만들고 문자열을 입력받는다.

alpabet_list = ['ABC','DEF','GHI','JKL','MNO','PQRS','TUV','WXYZ']
word = input()

주어진 문제의 그림을 보면 다이얼 한 칸당 3개~4개의 알파벳이 모여있다. 그래서 모여있는 알파벳을 각각의 문자열로 만들어서 이 문자열을 요소로 하는 리스트를 생성하였다. 문자열은 시간이 걸리는 순서를 기준으로 정렬하였다. 

 

입력받는 문자열은 word라는 변수에 선언하였다.

 

3. 코드 중반, 여러 개의 for문으로 알파벳을 다시 분리한다.

time = 0
for unit in alpabet_list :  
    for i in unit:  # alpabet 리스트에서 각 요소를 꺼내서 한글자씩 분리
        for x in word :  # 입력받은 문자를 하나씩 분리

for문 안에 하위 for문을 작성해서 알파벳 리스트 원소를 각각의 알파벳으로 분리하여 변수 i에 선언하고 입력받은 문자열을 분리하여 변수 x에 선언하였다. 

 

4. 분리된 알파벳을 비교해서 해당 알파벳의 시간을 구한다.

            if i == x :  # 두 알파벳이 같으면
                time += alpabet_list.index(unit) +3  # time = time + index +3
print(time)

위에서 생성된 i에 입력받은 문자열을 하나씩 x에 선언해서 i와 x를 비교하고 두 알파벳이 같으면 time변수에 시간을 더해준다.

 

시간은 맨 위 for문에서 알파벳 리스트의 요소인 unit 변수의 위치를 찾아서 더해준다. 위치는 index 함수를 사용하였다. 맨 마지막에 3을 더한 이유는 다이얼을 돌릴 때 1을 누르는데 2초가 걸리고 이후에는 1초씩 증가하기 때문이다. index는 0부터 시작하므로 첫 번째 인덱스는 +3을 해주면 정확한 시간을 반환할 수 있다.

 

반응형
댓글
반응형