문제 링크
과정 설계
solution
def solution(keymap, targets):
answer = []
for t in targets:
tmp = []
for c in t:
tmp.append(get_num(keymap,c))
if -1 in tmp:
answer.append(-1)
else:
answer.append(sum(tmp))
return answer
- 한 글자씩 순회하며 검색
- 그 글자의 최소 자판 횟수 리스트에 추가
- 모든 글자를 다 돌았을 때 -1이 있으면 해당 문자열을 못 만드는 것이므로 정답 리스트에 -1 추가
- -1이 없으면 해당 문자열을 만들 수 있으므로 2번 리스트의 합이 곧 자판 횟수
get_num
- 입력: 키맵, 목표 글자
- 출력: 목표 글자까지 최소 자판 횟수
def get_num(keymap,c):
keymap = list(map(deque,keymap))
cnt = 0
while sum(list(map(len,keymap))):
for k in keymap:
if k and k.popleft() == c:
return cnt+1
cnt += 1
return -1
- 키맵의 모든 원소가 빌때까지 반복
- 맨 앞글자부터 탐색
- 목표글자와 일치하면 자판 횟수 반환
- 목표글자가 아니면 자판 횟수 증가
- 키맵이 오링 날 때까지 목표글자를 못 찾았으면 -1 반환
CODE
from collections import deque
def get_num(keymap,c):
keymap = list(map(deque,keymap))
cnt = 0
while sum(list(map(len,keymap))):
for k in keymap:
if k and k.popleft() == c:
return cnt+1
cnt += 1
return -1
def solution(keymap, targets):
answer = []
for t in targets:
tmp = []
for c in t:
tmp.append(get_num(keymap,c))
if -1 in tmp:
answer.append(-1)
else:
answer.append(sum(tmp))
return answer