1 분 소요

문제 링크

내 풀이

def solution(keymap, targets):
    answer = []
    for target in targets:
        a = list(target)
        b = 0
        for alpha in a:
            keys = []
            for key in keymap:
                if alpha in key:
                    keys.append(key.find(alpha))
            if keys:
                b += min(keys) + 1
            else:
                b = -1
                break
        answer.append(b)
        
    return answer

다른 풀이


def solution(keymap, targets):
    result = []  # 결과를 저장할 리스트

    alp_key = dict()  # 각 문자에 대한 키 정보를 저장할 딕셔너리

    for row in keymap:
        for idx, alp in enumerate(row):
           
            if (alp in alp_key) and (idx+1) > alp_key[alp]:
                continue

            # 문자와 해당 키의 순서를 딕셔너리에 저장
            alp_key[alp] = idx + 1
    for row in targets:
        total_index = 0  # 문자열을 만들기 위한 총 키 누름 횟수

        for alp in row:
           
            # 문자가 딕셔너리에 있으면 해당 키의 순서를 더함
            if alp in alp_key:
                total_index += alp_key[alp]
               
            else:
                total_index = -1
                break

        # 결과 리스트에 각 문자열을 만들기 위한 키 누름 횟수 추가
        result.append(total_index)

    return result  # 결과 반환

풀이 해석

Dictionary 를 이용한 풀이이며 keymap의 원소에서 key = 알파벳, value = 맨처음의 순서로 가져옴으로써 미리 dict에 저장해놓았다. 그 뒤 targets를 읽으면서 dict에 저장된 value값을 더해 최종적으로 키 누름 횟수를 알아내었다.

배울 점

dict를 활용해 key value 값을 지정해놓고 이후에 이용하는 사고

댓글남기기