본문 바로가기
코딩 테스트/프로그래머스

가장 가까운 같은 글자

by ornni 2024. 4. 25.
728x90
반응형

첫번째 코드

 

alpha라는 리스트에 원소를 추가하면서 만약에 다음 원소가 alpha에 있는 경우

"현재 길이 - 인덱스"를 통해 길이를 확인하여 answer에 추가하고

사용된 원소를 제거하고 새로운 원소를 삽입하는 아이디어를 생각했다.

 

def solution(s):
    answer = []
    alpha = []

    for i in s:
        if i not in alpha:
            alpha.append(i)
            answer.append(-1)
        else:
            index = alpha.index(i)
            answer.append(len(alpha) - index)
            del alpha[index]
            alpha.append(i)

    return answer

 

오류;


두번째 코드

 

원인은 "aabba"의 경우 [-1, 1, -1, 1, 3]이 나와야 하는데

내 코드의 경우 앞의 a와 b가 삭제되어 [-1, 1, -1, 1, 2]가 나오게 된다!

 

그렇기 때문에 중간에 원소를 제거하지 않고 원소를 모은다.

그리고 만약에 같은 경우가 생기면 같은 원소인 인덱스들을 모아 최소의 인덱스만 answer에 합치는 코드를 작성했다.

 

def solution(s):
    answer = []
    index = -1
    for i in range(len(s)):
        indexs= []
        for j in range(i-1, -1, -1):
            if s[i] == s[j]:
                index = i - j
                indexs.append(index)
        if indexs:
            answer.append(min(indexs))
        else:
            answer.append(-1)
            
    return answer

 

통과!! 이지만 많은 용량을 차지했다.


세번째 코드

 

굳이 인덱스들을 모아 최소값을 이용하지 말고

그냥 마지막부터 loop을 돌려 같은 것이 있으면 해당 위치에서 인덱스를 구하고 반복문에서 빠져나오면 계산이 간단해질 것 같다!

 

def solution(s):
    answer = []

    for i in range(len(s)):
        index = -1
        for j in range(i-1, -1, -1):
            if s[i] == s[j]:
                index = i - j
                break
        answer.append(index)

    return answer

 

훨씬 차이 나는 용랑으로 역시 통과:)

오늘은 머리가 잘 안굴러가는 것일까 아니면 문제가 어려운 것일까... 푸는데 꽤 오래 걸렸던 것 같다..


링크

https://github.com/ornni/programmers/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/142086.%E2%80%85%EA%B0%80%EC%9E%A5%E2%80%85%EA%B0%80%EA%B9%8C%EC%9A%B4%E2%80%85%EA%B0%99%EC%9D%80%E2%80%85%EA%B8%80%EC%9E%90

 

programmers/프로그래머스/1/142086. 가장 가까운 같은 글자 at main · ornni/programmers

repository for recording Programmers Algorithm problem solving - ornni/programmers

github.com

 

반응형

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

푸드 파이트 대회  (2) 2024.04.26
체육복  (2) 2024.04.26
정수 내림차순으로 배치하기  (2) 2024.04.21
나머지가 1이 되는 수 찾기  (0) 2024.04.20
카드 뭉치  (2) 2024.04.19