def solution(keymap, targets):
answer = []
push = {}
for key in keymap:
for k in range(len(key)):
if key[k] not in push:
push[key[k]] = k+1
if push[key[k]] > k+1:
push[key[k]] = k+1
for t in targets:
ans = 0 ; k = 1
for i in t:
if i in push:
ans += push[i]
else:
k = 0
answer.append(-1)
break
if k == 1:
answer.append(ans)
return answer
풀이
keymap에 있는 문자열은 한 버튼으로 만들 수 있는 알파벳이다. ["ABACD","AESDF"]라는 keymap이 있다면 1번 버튼은 1번 누르면 A, 2번 누르면 B,... 5번 누르면 D가 나오는 방식이다. 2번 버튼도 동일하다.
이럴 때 최소한의 버튼만 눌러서 target에 있는 문자열을 완성시키고 싶을 때, 총 버튼을 몇 번 눌러야 하는지 계산하는 것이 문제다.
이 문제를 풀 때 우선 딕셔너리라는 건 바로 알아챘다. 중복이 있는 값이 나오니까. 그리고 버튼과 무관하게 알파벳마다 버튼을 눌러야하는 최솟값을 구하는 것이 필요하다 생각했고, push로 구현했다.
그 뒷부분은 이중 for문으로 push 내에 있는 값이면 딕셔너리 value를 더하고, 없는 값이 나오면 -1을 answer에 append하는 것으로 프로그래밍했다.