바위 뚫는중

[프로그래머스] Lv 1. 추억 점수, Lv1. 대충 만든 자판 - 문자열 딕셔너리, enumerate 본문

Algorithms/프로그래머스

[프로그래머스] Lv 1. 추억 점수, Lv1. 대충 만든 자판 - 문자열 딕셔너리, enumerate

devran 2023. 10. 26. 22:09
반응형

1️⃣ 추억 점수

문제

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

📝 풀이

name과 yearing의 순서 및 길이는 같다

이의 경우 (data(zip(키, 값))) 이렇게 딕셔너리로 선언이 가능하다

또한, 딕셔너리에서 get을 사용할 때 get(”key”, default값)으로 선언하면 키가 없을 때 default 값이 반환된다!

from collections import defaultdict

def solution(name, yearning, photo):
    answer = []
    info = dict(zip(name, yearning))    
    print(info)    
    for i in photo:
        score = 0
        for j in i:
            score += info.get(j,0)        
        answer.append(score)   
    return answer

1️⃣ 대충 만든 자판

문제

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

💡 아이디어

keymap targets result

["ABACD", "BCEFD"] ["ABCD","AABB"] [9, 4]
["AA"] ["B"] [-1]
["AGZ", "BSSS"] ["ASA","BGZ"] [4, 6]

ABACD의 경우 - 1번 키맵

1번 누르면 A, 2번 누르면 B, 3번 누르면 A, 4번 누르면 C, 5번 누르면 D가 나온다

BCEFD의 경우 - 2번 키맵

1번 누르면 B, 2번 누르면 C, 3번 누르면 E, 4번 누르면 F, 5번 누르면 D가 나온다

ABCD를 누르는 최솟값은

1번 키 1번, 2번 키 1번, 2번 키 2번, 1번/2번 키 5번

1 + 1 + 2 + 5 = 9 총 9번이다!

1 ≤ keymap의 길이 ≤ 100

위 범위에 알맞게 할라면?

📝 풀이

from collections import defaultdict
def solution(keymap, targets):
    answer = []
    data = defaultdict(list)
    for key in keymap: #모든 키 마다 반복 
        for i, k in enumerate(key): # enumerate -> 리스트 안의 요소와 인덱스를 한번에 가져옴

            if data[k] == []: #해당 요소가 빈값이면? 인덱스 + 1 넣기
                data[k] = i+1
            
            elif data[k] != [] and (i+1) < data[k]: # 해당요소가 빈값은 아니지만 지금 인덱스가 더 작다면?
                data[k] = i+1 #이 값으로 바꾸기
    
    for target in targets:
        values = 0
        for t in target: #target의 요소가 빈값이면 -1, 그렇지 않으면 data[t]의 값 더해주기
            if data[t] == []:
                values = -1
                break
            values += data[t]
        answer.append(values)
    return answer
반응형