
문제
https://school.programmers.co.kr/learn/courses/30/lessons/142086
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
- 문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알 수 있는 연산을 수행하는 함수 반환

- 제한사항
1 ≤ s의 길이 ≤ 10,000
s은 영어 소문자로만 이루어져 있음
문제 힌트
- 딕셔너리는 키-값 구조로 정보를 저장
여기서는- key: 문자
- value: 마지막으로 등장한 인덱스
- 딕셔너리를 통해 어떤 문자가 이전에 등장했는지, 언제 등장했는지를 빠르게 알 수 있음
정답 코드
def solution(s):
char_index = {} # 문자의 마지막 위치 저장
answer = []
for i, char in enumerate(s):
if char in char_index:
answer.append(i - char_index[char]) # 거리 계산
else:
answer.append(-1) # 처음 나온 문자
char_index[char] = i # 현재 위치 저장
return answer
코드 설명
char_index = {}
- char_index는 문자가 마지막으로 등장한 인덱스를 저장하는 딕셔너리
예: char_index = {'a': 3} → 'a'는 마지막에 3번째 인덱스에 나왔다는 뜻
answer = []
- 결과를 담을 리스트
- 각 문자에 대해 거리 또는 -1이 이 리스트에 순서대로 추가됨
for i, char in enumerate(s):
- 문자열 s를 한 글자씩, 그리고 그 인덱스(i)와 함께 순회
예: s = "banana"이면, i=0, char='b' → i=1, char='a' ...
if char in char_index:
answer.append(i - char_index[char])
- 지금 보고 있는 문자가 전에 나왔던 문자인지 확인
- 만약 전에 나왔다면, 거리 계산 가능
- 현재 위치(i)에서 이전에 나온 위치(char_index[char])를 빼서 거리를 구하기
- 예: 'a'가 1번째에 나오고, 3번째에 또 나오면 → 3 - 1 = 2
else:
answer.append(-1)
- 만약 처음 등장한 문자라면 → 앞에 같은 문자가 없으므로 -1을 추가
char_index[char] = i
- 현재 문자의 마지막 등장 위치를 딕셔너리에 저장
- 이렇게 해야 나중에 같은 문자가 또 나오면 거리 계산이 가능
'코딩 테스트 연습 > [프로그래머스] Python' 카테고리의 다른 글
| [LV.3] 연습문제 > 콜라 문제 (3) | 2025.07.17 |
|---|---|
| [LV.3] 연습문제 > 푸드 파이트 대회 (0) | 2025.07.15 |
| [LV.3] 월간 코드 챌린지 시즌1 > 두 개 뽑아서 더하기 (1) | 2025.07.10 |
| [LV.3] 정렬 > K번째수 (1) | 2025.07.09 |
| [LV.3] 연습문제 > 문자열 내 마음대로 정렬하기 ⭐️ (1) | 2025.07.08 |