⌨️
https://school.programmers.co.kr/learn/courses/30/lessons/160586
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 풀이
def solution(keymap, targets):
answer = []
for T in targets:
ans = 0 # 눌려야 하는 키의 수
exist = 0 # 찾는 문자가 없는 경우 -1
for t in T:
indexes = [] # 찾는 문자가 저장되어 있는 위치들 저장
for k in keymap:
indexes.append(k.find(t)) # 찾는 문자의 인덱스 저장
index = set(indexes) # 중복 제거
if -1 in index: # 못 찾은 케이스가 있는 경우
index.remove(-1) # -1 삭제
if len(index) == 0: # 못 찾은 케이스 밖에 없었던 경우 (찾는 문자가 어디에도 없음)
answer.append(-1)
exist = -1 # 찾는 문자가 없음을 표시
break
ans += min(index) + 1 # 눌러야 하는 최소 횟수 더하기
if exist == 0: # 찾는 문자가 있는 경우에만 answer에 ans 추가
answer.append(ans)
return answer
코드 설명
keymap: 1번 키부터 차례대로 할당된 문자들이 순서대로 담긴 문자열 리스트
targets: 입력하려는 문자열들이 담긴 문자열 배열
입력하려는 현재 문자열을 모두 검사한다.
for T in targets:
ans: 현재 문자열을 입력하기 위해 눌려야 하는 키의 수를 저장하는 변수. 현재 문자열의 모든 문자를 돌며 수를 증가시킨다.
exist: 현재 문자열의 문자들 중에 어디에도 존재하지 않는 문자가 있는지 식별하는 변수
(찾는 문자가 있는 경우: 0 (default), 찾는 문자가 없는 경우: -1)
ans = 0 # 눌려야 하는 키의 수
exist = 0 # 찾는 문자가 없는 경우 -1
현재 문자열의 모든 문자를 검사한다.
for t in T:
indexes: 찾는 문자가 저장되어 있는 위치를 모두 저장하는 리스트
keymap의 모든 요소를 돌면서, 현재 찾고 있는 문자가 위치해있는 인덱스를 저장한다.
index: indexes의 집합 (중복 제거를 위함)
indexes = [] # 찾는 문자가 저장되어 있는 위치들 저장
for k in keymap:
indexes.append(k.find(t)) # 찾는 문자의 인덱스 저장
index = set(indexes) # 중복 제거
index에 -1이 존재한다? ➡ 현재 문자를 못 찾은 케이스가 있다.
index에서 -1(못 찾은 케이스)을 삭제한다.
if -1 in index: # 못 찾은 케이스가 있는 경우
index.remove(-1) # -1 삭제
-1을 삭제하니 아무것도 남아있지 않음 ➡ 찾는 문자가 어디에도 없음을 의미한다.
정답 리스트에 -1을 추가해준 뒤, exist 변수를 -1로 변경해 찾는 문자가 없음을 표시하고, break문으로 for문을 탈출한다.
if len(index) == 0: # 못 찾은 케이스 밖에 없었던 경우 (찾는 문자가 어디에도 없음)
answer.append(-1)
exist = -1 # 찾는 문자가 없음을 표시
break
현재 문자열을 입력하기 위해 눌려야 하는 키의 수(ans)에 찾는 문자의 위치 리스트 중 최솟값 + 1을 더한다.
ans += min(index) + 1 # 눌러야 하는 최소 횟수 더하기
for문이 끝나고 나면, 현재 문자열들의 모든 문자가 찾아진 경우에만 정답리스트에 눌려야 하는 키의 수를 추가해준다.
찾는 문자가 없는 경우는 이미 for문 안에서 -1을 추가해줬기 때문!
if exist == 0: # 찾는 문자가 있는 경우에만 answer에 ans 추가
answer.append(ans)
쉽지 않았따,,! 👽
'코딩테스트' 카테고리의 다른 글
[백준][Python] 20125 쿠키의 신체 측정 (0) | 2024.05.27 |
---|---|
[백준][Python] 7568 덩치 (0) | 2024.05.12 |
[백준][Python] 23561 Young한 에너지는 부족하다 (0) | 2024.04.21 |
[백준][Python] 2195 문자열 복사 (0) | 2024.04.21 |
[백준][Python] 1189 컴백홈 (0) | 2024.04.14 |