[프로그래머스] 대충 만든 자판

이정연·2023년 5월 6일
0

CodingTest

목록 보기
157/165

문제 링크

과정 설계

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. 한 글자씩 순회하며 검색
  2. 그 글자의 최소 자판 횟수 리스트에 추가
  3. 모든 글자를 다 돌았을 때 -1이 있으면 해당 문자열을 못 만드는 것이므로 정답 리스트에 -1 추가
  4. -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. 키맵의 모든 원소가 빌때까지 반복
  2. 맨 앞글자부터 탐색
  3. 목표글자와 일치하면 자판 횟수 반환
  4. 목표글자가 아니면 자판 횟수 증가
  5. 키맵이 오링 날 때까지 목표글자를 못 찾았으면 -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
profile
0x68656C6C6F21

0개의 댓글