[프로그래머스 -142086] - 가장가까운글자

FeelingXD·2022년 12월 11일
0

문제풀이

목록 보기
3/34
post-thumbnail

❓ Problem

문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.
예를 들어, s="banana"라고 할 때, 각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.

  • b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
  • a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2로 표현합니다.
  • n도 자신보다 두 칸 앞에 n이 있습니다. 이는 2로 표현합니다.
  • a는 자신보다 두 칸, 네 칸 앞에 a가 있습니다. 이 중 가까운 것은 두 칸 앞이고, 이는 2로 표현합니다.
  • 따라서 최종 결과물은 [-1, -1, -1, 2, 2, 2]가 됩니다.

문자열 s이 주어질 때, 위와 같이 정의된 연산을 수행하는 함수 solution을 완성해주세요.

🤔 How

  • 글자 인덱스를 기억 할 필요가있다.
  • 똑같은 글자가 나왔을때는 가장 가까운 글자와의 인덱스 차이를 계산해야한다. 그런후 인덱스를 최신 인덱스로 업데이트 해주어야한다.
  • 인덱스의 초기값은 -1 로 사용한다.

❗ Solve

def solution(s):
    index = {x: -1 for x in s}
    answer = []
    for i, value in enumerate(s):
        if index[value] == -1:
            answer.append(index[value])
            index[value] = i
        else:
            answer.append(i-index[value])
            index[value] = i

    return answer

딕셔너리 컴프리핸션으로 글자의 인덱스값을 -1로 모두 초기화 시킨후
enumerate를 사용하여 인덱스, 글자 모두를 사용하게 루프를 수행하였습니다.

if 조건에서는 인덱스값이 -1 즉 가장 최신값인 경우를 검사하고
그렇지않을경우 else 분기에서 가장 최신인덱스값과 지금 인덱스를 비교하여 answer 배열에 추가해줍니다. 그후 인덱스를 현재인덱스로 업데이트해줍니다.

profile
tistory로 이사갑니다. :) https://feelingxd.tistory.com/

0개의 댓글