아래 링크 참고
https://school.programmers.co.kr/learn/courses/30/lessons/160586
def solution(keymap, targets):
answer = []
al_dict = {chr(i) : -1 for i in range(ord('A'), ord('Z') + 1)} # 알파벳 딕셔너리 만들기
# 알파벳 별로 출력을 위한 최소 횟수 업데이트
for key in keymap :
for k in key :
if al_dict[k] == -1 : # 키가 처음 나왔을 때는 그 값으로 대체
al_dict[k] = key.find(k) + 1
else : # 두 번 이상 나왔을 때
al_dict[k] = min(al_dict[k], key.find(k) + 1)
for target in targets :
num = 0
for t in target :
if al_dict[t] == -1 : # 자판에 없는 문자라면
num = -1
break
else :
num += al_dict[t]
answer.append(num)
return answer
input으로는 알파벳만 받기 때문에 각 알파벳 별로 자판을 누르는 최소 값을 업데이트 한다. 그 후 target에서 누를 수 있는 자판이 있는지 확인하고 조건에 맞게 값을 출력한다.
def solution(keymap, targets):
answer = []
al_dict = {chr(i) : 101 for i in range(ord('A'), ord('Z') + 1)} # 알파벳 딕셔너리 만들기
# 알파벳 별로 출력을 위한 최소 횟수 업데이트
for key in keymap :
for k in key :
al_dict[k] = min(al_dict[k], key.find(k) + 1)
for target in targets :
num = 0
for t in target :
if al_dict[t] == 101 : # 자판에 없는 문자라면
num = -1
break
else :
num += al_dict[t]
answer.append(num)
return answer
첫 번째 코드와 달라진 점은 딕셔너리 초기화 값과 비교값이 -1에서 101로 바뀐 점이다. 왜 101로 넣냐면 keymap으로 받는 원소의 최대 길이가 100이기 때문이다.
만약 keymap에서 구현할 수 있는 문자열이 있다면, key.find(k)가 무조건 100보다는 작을 것이다. 그래서 min()을 할 때 그 알파벳이 처음 나온 알파벳인지 조건으로 제시하지 않아도 된다!!!!
이 스킬은 다른 문제에서도 얼마든 활용할 수 있으니 꼭 알아두자!