Coding test

[Programmers] 가장 가까운 같은 글자

heedy 2022. 12. 9. 15:59
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 반환
  1. 입력 문자열만큼 반복
  2. t: s의 i번째 문자열까지 변수 지정
  3. rfind 함수를 활용하여 마지막 위치 반환 or -1 반환
  4. -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