코딩 테스트 연습/[프로그래머스] Python

[LV.3] 연습문제 > 가장 가까운 같은 글자 ⭐️

duswjd_data 2025. 7. 11. 14:57

문제

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

 

  • 현재 문자의 마지막 등장 위치를 딕셔너리에 저장
  • 이렇게 해야 나중에 같은 문자가 또 나오면 거리 계산이 가능