오랑우탄의 반란

프로그래머스 | 대충 만든 자판 (파이썬) 본문

PYTHON/프로그래머스

프로그래머스 | 대충 만든 자판 (파이썬)

5&2 2024. 8. 16. 11:39
반응형


오늘도 오랑이는 문제를 풉니다.

 

대충 만든 자판

 

 

풀이 과정

  • keymap 글자들의 최소 인덱스+1 목록
  • targets 단어의 각 글자에 대해 위 목록에 있는지 확인
    • 있으면 인덱스+1 answer에 append
    • 없으면 -1

우선 keymap의 인덱스 목록을 저장해줄 딕셔너리를 만듭니다. 

def solution(keymap, targets):
    answer = []
    key_dict = {} #key_dict에 각 글자별 최소 인덱스값 저장
    
    for i in keymap: 
        for idx, char in enumerate(i): #keymap 단어에서 각 글자의 인덱스와 글자 짝에 대해
            if char not in key_dict: 
                key_dict[char] = (idx+1) #글자가 딕셔너리에 없으면 인덱스+1 추가
            else: 
                key_dict[char] = min(key_dict[char],(idx+1)) 
                #있으면 기존 숫자와 새로운 인덱스+1 중 최솟값 추가
                #즉 같은 글자일 경우 최소 인덱스값이 들어감

 

만들어진 딕셔너리에 대해 targets 의 글자들과 매칭이 되는지 확인해줍니다.

for i in targets: #targets 글자가 key_dict에 있는지 확인 
        count = 0
        for j in i:
            if j not in key_dict:
                count = -1 #없을 경우 -1 반환하고 반복문 끊기
                break
            count += key_dict[j] #그 외의 경우는 인덱스값 더해주기
        answer.append(count)

 

 

최종 코드

def solution(keymap, targets):
    answer = []
    key_dict = {}
    
    for i in keymap: #key_dict에 각 글자별 최소 인덱스값 저장
        for idx, char in enumerate(i):
            if char not in key_dict:
                key_dict[char] = (idx+1)
            else: 
                key_dict[char] = min(key_dict[char],(idx+1))
    
    for i in targets: #targets 글자가 key_dict에 있는지 확인 
        count = 0
        for j in i:
            if j not in key_dict:
                count = -1
                break
            count += key_dict[j]
        answer.append(count)
    
    return answer

 

 


 

오랑우탄이 영어를 하고 오랑이가 코드마스터가 되는 그날까지~

 

 

 

 

프로그래머스

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

programmers.co.kr

 

반응형