[프로그래머스] 가장 가까운 글자 - 레벨1

eternal moment·2023년 10월 11일
0

문제

2023.10.11 풀이

def solution(s):
    answer = []
    stack=[0]*26
    for i in range(len(s)):
        k=stack[ord(s[i])-97]
        # print(s[i], ord(s[i])-97, k)
        if k==0:
            answer.append(-1)
        else:
            answer.append(i-k+1)
        stack[ord(s[i])-97]=i+1
    return answer
  • 알파벳의 최근 위치를 담을 리스트 stack에 알파벳의 개수 만큼 0으로 초기화를 해준 후
    문자열 s를 차례로 돌면서
    각 문자에 해당하는 번째 수(a:0, b:1, ... ,) 를 stack에 대입하여 각 문자열의 최근 위치 k를 구한다.
    만약 k가 0이면 그 전에 k가 나온 적 없었으니 answer에 -1을 넣어주고,
    k가 0이 아니면 현위치(해당하는 번째수)에서 그 전의 위치를 빼서 구한 간격을 answer에 넣어준다.
    이후 (k값과 무관하게) stack을 현위치로 업데이트 해준다.

  • 먼저 else: answer.append(i-k) stack[ord(s[i])-97]=i 로 풀었는데 테스트케이스 'aaa' 와 같은 경우에서 오류가 났다. ('aaa' -> [-1,1,1] )



다른 풀이

  1. 딕셔너리를 이용한 풀이
def solution(s):
    answer = []
    s_dict = dict()
    
    for i in range(len(s)):
        if s[i] not in s_dict:
            answer.append(-1)
        else:
            answer.append(i-s_dict[s[i]])
        s_dict[s[i]] = i
        
    return answer
  1. 딕셔너리와 enumerate 함수 이용한 풀이
def solution(s):
    answer = []
    dict = {}
    
    for index, word in enumerate(s):
        if word not in dict:
            answer.append(-1)
            dict[word] = index
    
        else:
            answer.append(index - dict[word])
            dict[word] = index
        
    return answer


check point

  • 문자열에 따라/알파벳의 따라 그 번째수에 해당하는 경우 딕셔너리 생각해내기.
  • dictionary : 키-값의 자료형
  • 딕셔너리 쌍 추가하는 법
    k={1: 'a'}
    k[2]='b'
    ----> k = {1: 'a', 2: 'b'}
    
  • enumerate : 리스트의 원소에 순서값을 부여해주는 함수(=문자열의 번째수 리턴)

0개의 댓글