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

kiki·2024년 1월 22일
0

프로그래머스

목록 보기
66/78

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/160586

문제 설명

1번 키부터 차례대로 할당된 문자들이 순서대로 담긴 문자열배열 keymap과 입력하려는 문자열들이 담긴 문자열 배열 targets가 주어질 때, 각 문자열을 작성하기 위해 키를 최소 몇 번씩 눌러야 하는지 순서대로 배열에 담아 return 하는 solution 함수를 완성해 주세요.

단, 목표 문자열을 작성할 수 없을 때는 -1을 저장합니다.

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로 만든다.

정리

  • find: 특정 문자, 원소의 인덱스를 알아내기 위해서는 문자열에선 find를, 리스트에선 index를 사용하면 된다.
  • dictionary in: if x in dictionary와 같이 코드를 작성한다면 x가 key에 있는지 없는지를 확인한다.

0개의 댓글