https://school.programmers.co.kr/learn/courses/30/lessons/160586
1번 키부터 차례대로 할당된 문자들이 순서대로 담긴 문자열배열 keymap과 입력하려는 문자열들이 담긴 문자열 배열 targets가 주어질 때, 각 문자열을 작성하기 위해 키를 최소 몇 번씩 눌러야 하는지 순서대로 배열에 담아 return 하는 solution 함수를 완성해 주세요.
단, 목표 문자열을 작성할 수 없을 때는 -1을 저장합니다.
def solution(keymap, targets):
dics = {}
for key in keymap:
for n,i in enumerate(key):
if not(i in dics and n+1 >= dics[i]):
dics[i]=n+1
result = []
for i in targets:
tmp = []
for j in i:
if j not in dics.keys():
tmp=[-1]
break
tmp.append(dics[j])
result.append(sum(tmp))
return result
먼저 keymap의 각 key를 for문을 돌면서 각 문자를 위해 눌러야하는 횟수를 dictionary에 저장해주는데 이때 최소값을 유지하도록 저장해준다.
처음엔 각 key마다 dictionary를 만들려고 했는데 그럴필요없이 하나의 dictionary로 저장해도 되는 부분이었다.
그 후 target 각각을 for문 돌면서 딕셔너리에서 해당 문자를 인덱싱해(눌러야하는 횟수(최소값) 찾기) 합을 구한다.
만약 찾고자하는 문자가 딕셔너리에 없다면 해당 target의 합을 -1로 만든다.
if x in dictionary
와 같이 코드를 작성한다면 x가 key에 있는지 없는지를 확인한다.