📍 문제 설명
📍 풀이 point
1) 나는 s를 key값은 알파벳, value값은 해당 알파벳이 위치한 인덱스 위치를 넣어 딕셔너리를 만들었다.
2) 그 후 value값 길이(key값 알파벳이 몇 번 나왔는지 담겨있는 list)가 1인 항목들은 중복해서 등장하는 알파벳이 아니기 때문에 해당 value의 인덱스 값에 해당하는 위치의 값을 -1로 바꾸어주었다.
3) 그리고 value값 길이가 1보다 큰 경우에서 처음으로 나오는 인덱스 값(0번째 인덱스) 또한 중복해서 등장하는 알파벳이 아니기 때문에 해당 value의 인덱스 값에 해당하는 위치의 값을 -1로 바꾸어주었다.
4) value값 길이가 1보다 큰 경우에 2번째 인덱스부터는 중복해 등장하는 알파벳이기 때문에 해당 인덱스의 값에서 전에 등장한 인덱스의 값을 뺀 값을 저장한다.
def solution(s):
s_dict = dict.fromkeys(s,0)
s_list = list(s)
# key값에 해당하는 알파벳이 등장하는 인덱스를 list형태로 value에 저장
for i in s_dict.keys() :
s_dict[i] = list(filter(lambda x: s[x] == i, range(len(s))))
for j in s_dict.keys():
if len(s_dict.get(j)) == 1:
s_list[s_dict.get(j)[0]] = -1
elif len(s_dict.get(j)) > 1:
s_list[s_dict.get(j)[0]] = -1 # value list 길이가 1이 넘더라도 첫번째 인덱스는 중복된 알파벳이 아니기 때문에 해당 인덱스에 해당하는 값에도 -1 넣기
for z in range(1,len(s_dict.get(j))):
s_list[s_dict.get(j)[z]] = s_dict.get(j)[z] - s_dict.get(j)[z-1]
return s_list
나는 조금 복잡하게 풀이한 거 같아 다른 분들의 간결한 코드를 참고하면 좋을 거 같다.
def solution(s):
answer = []
di = {}
for i in range(len(s)):
if s[i] not in di:
answer.append(-1)
else:
answer.append(i-di[s[i]])
di[s[i]] = i
return answer
내가 참고한 코드에서는 처음 등장하는 요소에 대하여 -1을 저장하고 그게 아니라면 이미 등장한 요소의 인덱스 값을 딕셔너리 자료형을 사용하여 저장하여 이미 등장한 요소의 경우 현재 인덱스값에서 딕셔너리에 저장된 인덱스값을 빼주는 방법을 사용하였다.