문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/142086?language=python3
소스 코드
def solution(string):
characters = set(list(string)) # 문자열을 구성하는 알파벳set
# '알파벳 : -1'로 dict 생성
my_dict = {character:-1 for character in characters}
answer = []
for idx in range(len(string)):
# 처음 등장하는 문자인 경우
if my_dict[string[idx]] == -1:
answer.append(-1)
else: # 이전에 등장한 적 있는 경우
answer.append(idx - my_dict[string[idx]])
# 마지막에 등장한 위치 최신화
my_dict[string[idx]] = idx
return answer
해설
- 해시, 문자열
각 알파벳이 등장했던 위치를 딕셔너리에 저장하며 딕셔너리에 저장된 값과 현재의 위치를 비교하여 정답 리스트에 추가하는 방식입니다.
1) 딕셔너리에 {알파벳 : -1} 꼴로 초기화
이렇게 초기화함으로써 value가 -1인 알파벳들은 아직 등장한 적이 없다는 뜻이 됩니다.
따라서 for문의 첫 번째 조건문을 만족하는 경우 정답 리스트에 -1을 추가합니다.
2) 이전에 등장한 적이 있는 알파벳은 현재와의 거리차를 정답 리스트에 추가
for문의 바깥에는 현재 위치(idx)를 딕셔너리에 저장하도록 되어 있습니다.
따라서 value가 -1이 아닌 알파벳들은 이전에 등장한 적이 있는 것이므로 인덱스차를 구해 정답 리스트에 추가합니다.
어떤 조건에 해당이 되든지와 상관 없이 현재 위치를 딕셔너리에 저장하여 알파벳의 최근 등장 위치를 최신화 해줍니다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 카드 뭉치 (Python) (0) | 2023.02.23 |
---|---|
[프로그래머스] 크기가 작은 부분문자열 (Python) (0) | 2023.02.22 |
[프로그래머스] 문자열 나누기 (Python) (0) | 2023.02.20 |
[프로그래머스] 명예의 전당 (1) (Python) (0) | 2023.02.17 |
[프로그래머스] 기사단원의 무기 (Python) (0) | 2023.02.16 |