본문 바로가기

Algorithm/Implementation

(Python3) - 프로그래머스(연습문제): 대충 만든 자판

반응형

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

hash map을 이용한 구현 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. 정답 변수 answer선언 후 빈 배열로 초기화합니다.

 

2. 문자, 누르는 최소 횟수를 각각 key, value로 저장할 hash_map변수 char_press_map을 선언 후 빈 객체로 초기화합니다.

📔 풀이과정

1. 'A'부터 'Z'까지 순회하며 원소별 최소 클릭 횟수 구해줍니다. 해당값은 keymap에서 현 알파뱃에 해당하는 index값의 최솟값을 저장하면 됩니다. keymap에서 현재 알파뱃이 없다면 int max값을 저장합니다.

 

2. targets에 대해 loop를 수행하며 다음을 진행합니다.   2-1. 현 문자열에 대해 for loop를 수행하며 현 문자의 클릭 최솟값을 char_press_map에서 가져옵니다.  2-2. 만약 int max값이라면 -1을 저장해줍니다.  2-3. 이외의 경우에는 현 문자에 대한 최소 클릭 횟수를 누적해 더해줍니다.  2-4. answer에 누적된 최소 클릭 횟수를 추가해줍니다.

📔 정답 출력 | 반환

answer를 반환합니다.


📕 Code

📔 Python3

def solution(keymap, targets):
    answer = []
    char_press_map = {}
    for i in range(26):
        char = chr(i+65)
        min_press = 0x3f3f3f3f
        for keys in keymap:
            if char in keys:
                min_press = min(min_press, keys.index(char) + 1)
        char_press_map[char] = min_press
    for target in targets:
        pressed = 0
        for i in range(len(target)):
            min_press = char_press_map[target[i]]
            if min_press == 0x3f3f3f3f:
                pressed = -1
                break
            pressed += min_press
        answer.append(pressed)
    return answer

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.