https://school.programmers.co.kr/learn/courses/30/lessons/142086
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
안녕하세요, 오늘은 프로그래머스 '가장 가까운 같은 글자' 문제에 대한 Python 풀이를 하겠습니다.
문제 이해
문제는 입력 문자열 s의 각 문자에 대해 '자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자'가 어디에 있는지 찾는 것입니다. 만약 같은 글자가 없다면 -1을 반환하고, 있다면 가장 가까운 글자까지의 거리를 반환합니다.
문제 접근 방식
문자열을 앞에서부터 순회하면서 각 문자의 마지막 위치를 저장합니다. 이 때, 각 문자의 마지막 위치는 딕셔너리를 사용하여 저장하였습니다.
이후, 현재 문자가 이미 앞에서 나왔다면, 현재 위치에서 마지막 위치까지의 거리를 구하고, 이를 결과 리스트에 추가합니다.
만약 현재 문자가 처음 나왔다면, -1을 결과 리스트에 추가합니다.
마지막으로, 현재 문자의 위치를 마지막 위치로 갱신합니다.
코드 작성
def solution(s):
answer = []
last_pos = {} # 각 문자의 마지막 위치를 저장하는 딕셔너리
for i, char in enumerate(s):
if char in last_pos: # 이미 같은 문자가 앞에 나왔다면
answer.append(i - last_pos[char]) # 현재 위치와 저장된 위치의 차이를 결과에 추가
else: # 처음 나온 문자라면
answer.append(-1) # -1을 결과에 추가
last_pos[char] = i # 현재 문자의 위치를 저장
return answer
코드 해설
last_pos는 각 문자의 마지막 위치를 저장하는 딕셔너리입니다.
s를 순회하며 현재 문자 char가 last_pos에 있으면 이미 앞에서 나왔던 문자이므로, i - last_pos[char]를 answer에 추가합니다. 이는 현재 위치와 같은 문자가 마지막으로 나왔던 위치의 차이입니다.
만약 char가 last_pos에 없다면, 처음 나왔던 문자이므로 answer에 -1을 추가합니다.
마지막으로, char의 위치를 last_pos에 갱신합니다.
마치며
이 문제는 딕셔너리를 활용하여 각 문자의 마지막 위치를 기억하고, 이를 바탕으로 가장 가까운 같은 글자까지의 거리를 계산하는 방법을 요구하는 문제였습니다. 이를 통해 딕셔너리의 활용법과 문자열의 순회 방법에 대해 연습할 수 있었습니다.
'프로그래머스' 카테고리의 다른 글
프로그래머스 - JadenCase 문자열 만들기 [Python] (0) | 2023.07.26 |
---|---|
프로그래머스 - 최대값과 최솟값 [Python] (0) | 2023.07.25 |
프로그래머스 - 푸드 파이트 대회 [Python] (0) | 2023.06.12 |
프로그래머스 - K번째수 [Python] (0) | 2023.06.12 |
프로그래머스 - 두개 뽑아서 더하기 [Python] (1) | 2023.06.11 |