728x90
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제
휴대폰 자판을 이용해 특정 문자열을 작성할 때, 키를 최소 몇 번 눌러야 그 문자열을 작성할 수 있는지 알아보고자 합니다.
[입력]
- 1번 키부터 차례대로 할당된 문자들이 순서대로 담긴 문자열 배열 keymap
- 입력하려는 문자열들이 담긴 문자열 배열 targets
[출력]
각 문자열을 작성하기 위해 키를 최소 몇 번씩 눌러야 하는지 순서대로 배열에 담아 return
2. 풀이
예제 입출력과 해설을 보게된다면 target의 각 문자를 입력할 때 자판의 처음부터 시작해 해당 알파벳을 찾는 것을 알 수 있습니다.
이를 이용해서 각 keymap들을 순회하며, 특정 알파벳을 입력할 때의 최소 클릭 횟수를 먼저 찾을 필요가 있습니다.
alphabet = {}
def solution(keymap, targets):
answer = []
for key in keymap:
for i, s in enumerate(key):
if s in alphabet:
alphabet[s] = min(alphabet[s], i+1)
else:
alphabet[s] = i+1
이렇게 각 알파벳을 입력할 때 필요한 최소 클릭 횟수를 구했으니, 이제 target들을 순회하며, 최소 클릭 횟수들을 더해주기만 하면 됩니다.
🌹 이 때, target의 특정 알파벳이 keymap(즉, 위 코드의 alphabet)에 존재하지 않을 때는 -1을 반환해주어야 함에 유의하세요.
3. 코드
Python
alphabet = {}
def solution(keymap, targets):
answer = []
for key in keymap:
for i, s in enumerate(key):
if s in alphabet:
alphabet[s] = min(alphabet[s], i+1)
else:
alphabet[s] = i+1
for target in targets:
count = 0
for s in target:
if s not in alphabet:
count = -1
break
else:
count += alphabet[s]
answer.append(count)
return answer
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스 > Lv3] 연속 펄스 부분 수열의 합 (0) | 2023.03.05 |
---|---|
[프로그래머스 > Lv1] 바탕화면 정리 (0) | 2023.03.04 |
[프로그래머스 > Lv2] 덧칠하기 (0) | 2023.03.04 |
[프로그래머스 > Lv2] 혼자서 하는 틱택토 (0) | 2023.03.03 |
[프로그래머스 > Lv2] 미로탈출 (0) | 2023.02.16 |