Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 오류
- LEVEL1
- gold2
- 9252
- 백엔드
- leetcode 69
- LEVEL2
- jpa
- leetcode
- CSS
- Kakao
- error
- Thymeleaf
- Gold4
- gold5
- glod4
- 백준
- java
- AWS
- HTML
- 배포
- glod5
- PYTHON
- siver3
- 프로그래머스
- 구현
- spring
- 개념
- LCS
- mysql
Archives
- Today
- Total
이 험난한 세상에서어어~
대충 만든 자판 본문
문제 설명
키보드가 주어지는데, 해당 키보드는 키를 연속해서 눌러야지 문자가 바뀐다. 예를 들어서 'ABACD'라는 키보드가 있을 때 한 번 누르면 A, 두 번 두르면 B, 세 번 누르면 A... 이렇게 문자가 바뀌는 방식이다. 이런 키보드와 만들어야 하는 문자가 주어졌을 때, 해당 문자 최소 몇 번씩 눌러 만들 수 있는지 구하는 문제다.
https://school.programmers.co.kr/learn/courses/30/lessons/160586
문제 풀이
첫 번째 접근
dic에 각 키에 접근할 수 있는 최소 값을 넣어준 다음에 만들고 싶은 문자열의 문자를 하나씩 돌면서 dic에서 값을 찾아 넣어주면 된다고 생각했다. 이때 만들 수 없는 문자가 나오면 정답에 -1을 붙이고 flag에 False를 넣어 반환하게 했다. 그리고 flag가 True일 때마다 정답에 붙이도록 하면 된다.
코드
def solution(keymap, targets):
answer = []
keyDic = {}
# 각 키마다 최소 위치를 찾아준다.
for key in keymap:
for index, k in enumerate(key):
if not k in keyDic.keys():
keyDic[k] = (index+1)
else:
keyDic[k] = min(keyDic[k], (index+1))
for target in targets:
tmp = 0
flag = True
for t in target:
if t in keyDic.keys():
tmp += keyDic[t]
else:
answer.append(-1)
flag = False
break
if flag:
answer.append(tmp)
'algorithm > 코딩 테스트' 카테고리의 다른 글
달리기 경주 (0) | 2023.06.26 |
---|---|
문자열 나누기 (0) | 2023.06.26 |
주차 요금 계산 (0) | 2023.06.23 |
컨베이어 벨트 위의 로봇 (0) | 2023.06.22 |
감시, python (0) | 2023.06.21 |