프로그래머스

프로그래머스 - 가장 가까운 같은 글자 [Python]

SS_G 2023. 6. 18. 00:26
반응형

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에 갱신합니다.

 

마치며

이 문제는 딕셔너리를 활용하여 각 문자의 마지막 위치를 기억하고, 이를 바탕으로 가장 가까운 같은 글자까지의 거리를 계산하는 방법을 요구하는 문제였습니다. 이를 통해 딕셔너리의 활용법과 문자열의 순회 방법에 대해 연습할 수 있었습니다.

반응형