코딩 테스트/프로그래머스

Lv1. 대충 만든 자판

  • -
728x90
반응형

문제 보기 :  대충 만든 자판

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


문제

  • 정답률 : 58%


작성 코드

def solution(keymap, targets):
    answer = []
    push = {}
    for key in keymap:
        for k in range(len(key)):
            if key[k] not in push:
                push[key[k]] = k+1
            if push[key[k]] > k+1:
                push[key[k]] = k+1
            
    for t in targets:
        ans = 0 ; k = 1
        for i in t:
            if i in push:
                ans += push[i]
            else:
                k = 0
                answer.append(-1)
                break
        if k == 1:
            answer.append(ans)

    return answer

풀이

keymap에 있는 문자열은 한 버튼으로 만들 수 있는 알파벳이다. ["ABACD","AESDF"]라는 keymap이 있다면 1번 버튼은 1번 누르면 A, 2번 누르면 B,... 5번 누르면 D가 나오는 방식이다. 2번 버튼도 동일하다.

이럴 때 최소한의 버튼만 눌러서 target에 있는 문자열을 완성시키고 싶을 때, 총 버튼을 몇 번 눌러야 하는지 계산하는 것이 문제다.

이 문제를 풀 때 우선 딕셔너리라는 건 바로 알아챘다. 중복이 있는 값이 나오니까.
그리고 버튼과 무관하게 알파벳마다 버튼을 눌러야하는 최솟값을 구하는 것이 필요하다 생각했고, push로 구현했다.

그 뒷부분은 이중 for문으로 push 내에 있는 값이면 딕셔너리 value를 더하고, 없는 값이 나오면 -1을 answer에 append하는 것으로 프로그래밍했다.

쉬운 문제 같은데 정답률이 낮아서 괜히 겁먹었다,,ㅎㅎ...

320x100
728x90

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

Lv3. 최고의 집합  (0) 2024.09.14
Lv1. 완주하지 못한 선수  (0) 2024.09.13
Lv2. 구명보트  (0) 2024.09.11
Lv2. 택배상자  (1) 2024.09.10
Lv1. 문자열 나누기  (0) 2024.09.09
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.