728x90
문제 설명
문제 풀이 과정
처음에는 list에 추가해서 index를 반환하려고 했는데, 중복 글자의 경우 가장 첫번째 index를 반환하는 것 때문에 통과를 하지 못 했다. 그래서 찾은 것이 중복 index 전부 다 반환하는 list(filter(lambda x : check[x] == i, range(len(check))))[-1] 코드
어찌저찌 실행은 되지만 효율성 측면에서 조금 아슬아슬한 감이 있어 다른 사람의 코드를 찾아보기로 함.
def solution(s):
check = []
answer = []
for i in list(s):
if i not in check:
answer.append(-1)
check.append(i)
elif i in check:
n = (len(check) - list(filter(lambda x : check[x] == i, range(len(check))))[-1])
answer.append(n)
check.append(i)
return answer
다른 사람의 풀이
def solution(s):
answer = []
for i in range((len(s))):
t = s[:i]
idx = t.rfind(s[i])
if idx == -1:
answer.append(-1)
else:
answer.append(i-idx)
return answer
rfind() 함수
문자열 내부에서 특정 문자의 위치를 오른쪽부터 탐색하여 위치 반환 = 지정 문자열의 마지막 위치 찾기
해당 문자가 없다면 -1 반환
- 입력 문자열만큼 반복
- t: s의 i번째 문자열까지 변수 지정
- rfind 함수를 활용하여 마지막 위치 반환 or -1 반환
- -1이면 -1 추가, 중복 있을 시 (지정 문자열 위치 - 마지막 위치)
효율성 면에서도 이 부분이 훨씬 나았다..
rfind() 기억하기!
- coding test url:
https://school.programmers.co.kr/learn/courses/30/lessons/142086
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
728x90
'Coding test' 카테고리의 다른 글
[Programmers] 햄버거 만들기 (2) | 2022.12.11 |
---|---|
[Programmers] 푸드 파이트 대회 (0) | 2022.12.11 |
[Programmers] 과일 장수 (0) | 2022.12.11 |
[Programmers] 기사단원의 무기 (0) | 2022.12.09 |
[Programmers] 명예의 전당 (1) (0) | 2022.12.09 |