일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프로그래머스
- Queue
- programmers
- join
- CodingTest
- coding
- mysql
- 데이터분석
- lambda
- 시간복잡도
- lv4
- Level2
- import re
- 코딩테스트
- level4
- python
- Stack
- 연습문제
- 조합
- 코테
- 완전탐색
- 파이썬
- sql
- BFS
- collections
- itertools
- 코딩
- time complexity
- counter
- coding test
- Today
- Total
ror_coding
[Programmers] 대충 만든 자판 - 160586 본문
728x90
string 에서 특정 문자의 index를 출력하는 코드는 .find() 이다.
index()는 list에서만 적용되기 때문에 구별해서 써야한다!
Question
이 휴대폰 자판을 이용해 특정 문자열을 작성할 때, 키를 최소 몇 번 눌러야 그 문자열을 작성할 수 있는지 알아보고자 합니다.
1번 키부터 차례대로 할당된 문자들이 순서대로 담긴 문자열배열 keymap과 입력하려는 문자열들이 담긴 문자열 배열 targets가 주어질 때, 각 문자열을 작성하기 위해 키를 최소 몇 번씩 눌러야 하는지 순서대로 배열에 담아 return 하는 solution 함수를 완성해 주세요.
단, 목표 문자열을 작성할 수 없을 때는 -1을 저장합니다.
Code (After)
def solution(keymap, targets):
answer = []
for tg in targets:
time = 0
for t in tg:
tmp = [km.index(t) for km in keymap if t in km]
if tmp : time += min(tmp)+1
else : time = -1; break
answer.append(time)
return answer
Code (Before)
def solution(keymap, targets):
answer = []
for target in targets:
sum_, fail = 0, False
for t in target:
min_index = 999
for key in keymap:
min_index = key.find(t) if key.find(t) != -1 and key.find(t) <= min_index else min_index
if min_index == 999 : fail = True ; break
sum_ += min_index+1
if fail : answer.append(-1)
else : answer.append(sum_)
return answer
728x90
'Algorithm > Python' 카테고리의 다른 글
[Programmers] 체육복 - 42862 (1) | 2024.10.17 |
---|---|
[Programmers] 둘만의 암호 - 155652 (0) | 2024.10.14 |
[Programmers] [1차] 다트 게임 - 17682 (1) | 2024.10.13 |
[Programmers] 옹알이 (2) - 133499 (0) | 2024.10.13 |
[Programmers] 실패율 - 42889 (1) | 2024.10.12 |