프로그래머스-코딩테스트/Lv.1
가장 가까운 같은 글자
stem_sw
2024. 9. 9. 10:41
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
문자열 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을 완성해주세요.
코드
def solution(s):
ind_dict = {}
answer = []
for i in range(len(s)):
if s[i] not in ind_dict:
answer.append(-1)
ind_dict[s[i]] = i
else:
answer.append(i - ind_dict[s[i]])
ind_dict[s[i]] = i
return answer
- ind_dict 라는 딕셔너리에 가장 최근에 나온 문자 인덱스를 저장
- 문자 호출때마다 비교. 첫 등장은 -1로
노트
정확한 사용법 기억하기
.pop(index)
.index('a')
def solution(s):
ind_dict = {}
answer = []
for i in range(len(s)):
ind_dict[s[i]] = list(filter(lambda x: s[x]==s[i], range(len(s))))
def calc_diff(lst):
result = [-1]
for i in range(1, len(lst)):
result.append(lst[i] - lst[i-1])
return result
result_dict = {key: calc_diff(value) for key, value in ind_dict.items()}
for k in s:
answer.append(result_dict[k].pop(0))
return answer
- 작동은 하는데 시간 초과로 실패
- 알파벳과 알파벳의 위치 인덱스가 담긴 딕셔러니 만들고
- 인덱스들의 차이 구하는 함수, 첫 번째 요소는 -1로 지정
- s 순서대로 answer에 추가해줌
참조
[Python] 위치(인덱스) 찾기 (find(), index())
백준 1167 트리의 지름 특정 원소가 리스트의 몇 번째 인덱스에서 등장하는지 찾아야 했다. indexOf()가 안되길래 검색해보니 indexOf()는 자바스크립트 문법이었다.. 이참에 잘 정리해두자. 위치(인덱
sxbxn.tistory.com