티스토리 뷰

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

 

프로그래머스

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

programmers.co.kr

문제이해

  • 휴대폰 자판의 개수가 1개부터 최대 100개까지 있을 수 있다.
  • 같은 문자가 자판 전체에 여러번 할당된 경우도 있다.
  • 키 하나에 같은 문자가 여러번 할당된 경우도 있다.
  • 문자가 할당되지 않았을 수도 있다.
  • 이 휴대폰 자판을 이용해서 문자열을 입력할 때 키를 최소 몇번 입력해야 이 문자열을 작성할 수 있을까?

문제풀이

  • 각 키는 target마다 재활용된다.
  • 그리고 각 알파벳마다 최소횟수로 선택할 수 있는 것은 정해져있다.
  • 그래서 딕셔너리를 활용하여 각 알파벳별 선택되는 최소 횟수를 저장하여 사용한다.
  • num이 101인 이유는 문제에서 한 key의 최대 길이가 100이라고 주어졌기 때문이다.
def solution(keymap, targets):
    answer = []
    num=101
    alpha={'A':num, 'B':num, 'C':num, 'D':num, 'E':num, 'F':num,
          'G':num, 'H':num, 'I':num, 'J':num, 'K':num, 'L':num, 
          'M':num, 'N':num, 'O':num, 'P':num, 'Q':num, 'R':num,
          'S':num, 'T':num, 'U':num, 'V':num, 'W':num, 'X':num, 'Y':num, 'Z':num}
    for key in keymap:
        for i, k in enumerate(key):
            alpha[k]=min(alpha[k], i+1)
    
    for target in targets:
        cnt=0
        for t in target:
            if alpha[t]==num:
                cnt=-1
                break
            cnt+=alpha[t]
        answer.append(cnt)
    return answer
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함