본문 바로가기
코딩 테스트/프로그래머스

대충 만든 자판

by ornni 2024. 11. 1.
728x90
반응형

첫번째 코드

 

문제를 읽어보고 내가 먼저 든 생각은 "이 문제를 제약이 없는 일반화된 상태에서도 풀 수 있도록 만들고 싶다"는 것이었다.

그렇기 때문에 가장 먼저 생각난 것은 1. 문자별로 눌러야 하는 최소의 숫자를 딕셔너리 형태로 저장하자는 것이었다.

그 후에 2. targets의 문자를 딕셔너리에서 찾아 정답을 구하는 방식이었다.

 

1. 문자별로 눌러야 하는 최소의 숫자를 딕셔너리 형태로 저장하기

- 빈 딕셔러니(key_dict)를 만든다

- keymap의 모든 단어들과 알파벳들을 거쳐가면서 최소(min)의 눌러야 하는 값을 비교하면서 값으로 저장한다.

 

2. targets의 문자를 찾아 정답 구하기

- targets의 단어들을 거치기 위해 각 단어별로 최소한으로 눌러야 하는 값 now_answer = 0으로 초기화한다.

- key_dict의 키 값에 해당 알파벳이 있는 경우 key의 value값을 불러와 now_answer에 최소로 눌러야 하는 숫자를 더한다.

- 만약 키 값에 해당 알파벳이 없는 경우 만들 수 없는 단어가 되어 now_answer = 0으로 한 후 break를 하여 더 볼 필요가 없다.

 

- 만약 now_answer이 0이 아니라면 만들 수 있는 문자열의 최소로 눌러야하는 수가 되므로 answer에 append한다.

- 만약 now_answer가 0이라면 만들 수 없는 문자가 되므로 -1을 answer에 append하도록 한다.

 

최종 답안인 answer을 보인다.

 

def solution(keymap, targets):
    answer = []
    
    key_dict = {}
    
    for words in keymap:
        for i in range(len(words)):
            now = words[i]
            if now in key_dict.keys():
                key_dict[now] = min(i + 1, key_dict[now])
            else:
                key_dict[now] = i+1
    
    for target_words in targets:
        now_answer = 0
        for now_word in target_words:
            if now_word in key_dict.keys():
                now_answer += key_dict[now_word]
            else:
                now_answer = 0
                break
        
        if now_answer != 0:
            answer.append(now_answer)
        else:
            answer.append(-1)
                
    return answer

 

통과!

이전에 코딩 테스트 문제 풀어야지 했을때는 풀지 못했던 기억이 있는데,

그래도 나름 내공이 쌓인건가 알고리즘이 없는 문제는 뚝딱 잘 푸네!


링크https://github.com/ornni/programmers/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/160586.%E2%80%85%EB%8C%80%EC%B6%A9%E2%80%85%EB%A7%8C%EB%93%A0%E2%80%85%EC%9E%90%ED%8C%90

 

programmers/프로그래머스/1/160586. 대충 만든 자판 at main · ornni/programmers

repository for recording Programmers Algorithm problem solving - ornni/programmers

github.com

 

반응형

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

닉네임 규칙  (0) 2024.11.04
문자열 나누기  (1) 2024.10.28
심폐소생술  (0) 2024.10.25
각도 합치기  (0) 2024.10.21
버스  (0) 2024.10.18