[Python#50] 가장 가까운 같은 글자

Gi Woon Lee·2024년 9월 6일
0

Python

목록 보기
9/13

가장 가까운 같은 글자

유투브 설명 링크

문제 이해

  • 주어진 문자열 s에서 각 문자를 순회하며 해당 문자가 처음 등장했으면 -1을, 이전에 등장한 적이 있다면 그 이전 위치와의 거리(현재 인덱스에서 이전 인덱스를 뺀 값)를 반환하는 문제입니다.
  • 예를 들어, 문자열 s = "banana"라면 결과는 [-1, -1, -1, 2, 2, 2]가 됩니다.
  • 핵심 전략은 딕셔너리(Dictionary)를 사용하여 각 문자의 마지막 등장 위치를 기록하고, 이를 통해 거리 계산을 하는 것입니다.

자료형 선언

  • answer: 각 문자의 결과값을 담을 리스트.
  • dic: 문자와 그 문자의 마지막 등장 인덱스를 기록하는 딕셔너리.
    • Key: 문자
    • Value: 마지막 등장한 인덱스

논리 구현

  1. 문자열의 길이만큼 반복문을 돌며, 각 문자의 인덱스를 확인합니다.
  2. 만약 문자가 dic에 없다면(if string[i] not in dic), -1answer에 추가합니다.
  3. 만약 문자가 dic에 이미 있다면, 현재 인덱스와 dic에 저장된 이전 인덱스의 차이를 계산하여 answer에 추가합니다.
  4. dic에서 해당 문자의 인덱스를 현재 인덱스로 업데이트하여 마지막 등장 위치를 기록합니다.
  5. 최종적으로 answer를 반환하여 각 문자의 가장 가까운 같은 글자와의 거리를 계산합니다.

코드 구현

def solution(string):
    answer = []      # 결과값을 담을 리스트
    dic = {}         # 마지막 등장 위치를 저장할 딕셔너리
    for i in range(len(string)):  # 문자열의 길이만큼 반복
        if string[i] not in dic:  # 문자가 처음 등장했을 경우
            answer.append(-1)     # -1을 추가
        else:                     # 이전에 등장한 문자가 있을 경우
            answer.append(i - dic[string[i]])  # 현재 인덱스와 이전 인덱스의 차이 추가
        dic[string[i]] = i  # 문자의 마지막 등장 인덱스를 현재 인덱스로 업데이트
    return answer

# 예제 실행
s = "banana"
print(solution(s))  # 결과: [-1, -1, -1, 2, 2, 2]

추가 설명

  • 딕셔너리 업데이트: 딕셔너리 dic에서 같은 문자가 여러 번 등장할 경우, 해당 문자의 인덱스는 마지막으로 등장한 위치로 덮어쓰여집니다.
  • 문자 순회: if 조건문이 실행되면 -1을 추가하고, 바로 else 문으로 넘어가지 않기 때문에 처음 등장한 경우와 이전에 등장한 경우를 구분하여 처리합니다.

이 코드의 로직을 이해하면, 각 문자의 이전 위치를 효과적으로 추적할 수 있어 다양한 문자열 분석에 유용하게 활용할 수 있습니다.

0개의 댓글