s
에서 각 문자를 순회하며 해당 문자가 처음 등장했으면 -1
을, 이전에 등장한 적이 있다면 그 이전 위치와의 거리(현재 인덱스에서 이전 인덱스를 뺀 값)를 반환하는 문제입니다.s = "banana"
라면 결과는 [-1, -1, -1, 2, 2, 2]
가 됩니다.딕셔너리(Dictionary)
를 사용하여 각 문자의 마지막 등장 위치를 기록하고, 이를 통해 거리 계산을 하는 것입니다.answer
: 각 문자의 결과값을 담을 리스트.dic
: 문자와 그 문자의 마지막 등장 인덱스를 기록하는 딕셔너리. dic
에 없다면(if string[i] not in dic
), -1
을 answer
에 추가합니다. dic
에 이미 있다면, 현재 인덱스와 dic
에 저장된 이전 인덱스의 차이를 계산하여 answer
에 추가합니다.dic
에서 해당 문자의 인덱스를 현재 인덱스로 업데이트하여 마지막 등장 위치를 기록합니다.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
문으로 넘어가지 않기 때문에 처음 등장한 경우와 이전에 등장한 경우를 구분하여 처리합니다.이 코드의 로직을 이해하면, 각 문자의 이전 위치를 효과적으로 추적할 수 있어 다양한 문자열 분석에 유용하게 활용할 수 있습니다.