코드
def solution(s):
answer = []
for i in range(len(s)):
if s[i] in s[0:i]:
answer.append(i - s[0:i].rindex(s[i]))
else:
answer.append(-1)
return answer
s='banana'일 때, s의 각 위치보다 앞에 있으면서 가장 가까운 곳에 있는 같은 문자와의 거리를 찾는 문제이다.
'banana'의 경우 다음과 같다.
1) b는 첫 번째 문자이고 앞에 같은 문자열이 없으므로, -1
2) a 앞의 문자열인 'b'에는 같은 문자열이 없으므로, -1
3) n 앞의 문자열인 'ba'에는 같은 문자열이 없으므로, -1
4) a 앞의 문자열인 'ban'에는 a가 있으므로, 3 - 1 = 2
5) n 앞의 문자열인 'bana'에는 n이 있으므로, 4 - 2 = 2
6) a 앞의 문자열인 'banan'에는 a가 있고 가장 가까운 곳과의 거리는, 5 - 3 = 2
따라서 결과는 [-1, -1, -1, 2, 2, 2]가 된다.
본인의 앞까지의 문자열에 같은 문자열이 있는지 판단하기 위해 if 조건문을 작성하였다.
s[0:i]는 문자열 s에서 0번 인덱스부터 i-1번째 인덱스까지의 문자열을 슬라이싱 하는 것이다.
i가 5이면, banana의 [0:5]은 banan이 된다.
슬라이싱 한 문자열에 해당 문자열이 포함되어 있으면, 거리를 구한다.
이때, rindex 함수를 사용하였는데 index()는 앞에서부터 인덱스를 구하는 반면, rindex()는 뒤에서부터 인덱스를 구해준다.
우리는 현재 문자열부터 가장 가까운 곳에 위치한 문자열의 위치를 알아야 하므로 rindex()를 사용하는 것이다.
i = 5일 때, s[i]는 a이다.
s[0:i]인 banan에서 s[i]와 가장 가까운 위치에 있는 같은 문자열은 3번 인덱스에 위치한 a이다.
banan의 뒤에서부터 a의 위치를 찾아야 하기 때문에 rindex()를 사용하였고, s[0:i].rindex(s[i])를 하면 가장 가까운 위치를 찾을 수 있다.
해당 위치를 i에서 빼주면 우리가 구하고자 하는 거리인 5 - 3 = 2를 구할 수 있다.