이 험난한 세상에서어어~

대충 만든 자판 본문

algorithm/코딩 테스트

대충 만든 자판

토끼띠NJW 2023. 6. 26. 10:28

문제 설명

키보드가 주어지는데, 해당 키보드는 키를 연속해서 눌러야지 문자가 바뀐다. 예를 들어서 'ABACD'라는 키보드가 있을 때 한 번 누르면 A, 두 번 두르면 B, 세 번 누르면 A... 이렇게 문자가 바뀌는 방식이다. 이런 키보드와 만들어야 하는 문자가 주어졌을 때, 해당 문자 최소 몇 번씩 눌러 만들 수 있는지 구하는 문제다.

 

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

 

프로그래머스

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

programmers.co.kr

 

문제 풀이

첫 번째 접근

dic에 각 키에 접근할  수 있는 최소 값을 넣어준 다음에 만들고 싶은 문자열의 문자를 하나씩 돌면서 dic에서 값을 찾아 넣어주면 된다고 생각했다. 이때 만들 수 없는 문자가 나오면 정답에 -1을 붙이고 flag에 False를 넣어 반환하게 했다. 그리고 flag가 True일 때마다 정답에 붙이도록 하면 된다.

 

코드

def solution(keymap, targets):
    answer = []
    keyDic = {}
    
    # 각 키마다 최소 위치를 찾아준다.
    for key in keymap:
        for index, k in enumerate(key):
            if not k in keyDic.keys():
                keyDic[k] = (index+1)
            else:
                keyDic[k] = min(keyDic[k], (index+1))

    for target in targets:
        tmp = 0
        flag = True
        for t in target:
            if t in keyDic.keys():
                tmp += keyDic[t]
            else:
                answer.append(-1)
                flag = False
                break
        if flag:
            answer.append(tmp)

'algorithm > 코딩 테스트' 카테고리의 다른 글

달리기 경주  (0) 2023.06.26
문자열 나누기  (0) 2023.06.26
주차 요금 계산  (0) 2023.06.23
컨베이어 벨트 위의 로봇  (0) 2023.06.22
감시, python  (0) 2023.06.21