https://school.programmers.co.kr/learn/courses/30/lessons/178870
나의 풀이 - 완전 틀림
from collections import deque
def solution(sequence, k):
temp = {}
seqIndex = len(sequence) - 1
while seqIndex > -1:
temp[seqIndex] = sequence[seqIndex]
valSum = sum(temp.values())
if valSum == k:
return [list(temp.keys())[-1], list(temp.keys())[0]]
elif valSum > k:
del(temp[list(temp.keys())[0]])
seqIndex -= 1
- 길이가 짧은 수열이 여러 개인 경우 앞쪽(시작 인덱스가 작은)에 나오는 수열을 찾습니다. <- 조건을 충족시키는 못하는 로직이다.
나의 풀이 - 시간초과
def solution(sequence, k):
answer = []
for i in range(len(sequence)):
if sequence[i] == k:
return [i, i];
for j in range(len(sequence)):
if sum(sequence[i:j]) == k:
answer.append((i, j-1))
result = sorted(answer, key = lambda x: (x[1]-x[0], x[0]))
return result[0]
- 이중포문으로 풀면 시간초과가 날 것 같았지만, 다른 방법이 떠오르지 않아서 구현해보았으나 역시 시간초과가 났다.
나의 풀이 - 다른 사람 풀이 참조
def solution(sequence, k):
answer = []
sum = 0
left = 0
right = -1
while True:
if sum < k:
right += 1
if right >= len(sequence):
break
sum += sequence[right]
else:
sum -= sequence[left]
left += 1
if left >= len(sequence):
break
if sum == k:
answer.append([left, right])
result = sorted(answer, key = lambda x: (x[1]-x[0], x[0]))
return result[0]
- 결국 다른 사람의 풀이를 참조하였다.
- left, right, sum 3개의 변수를 두고 풀 생각은 전혀 못했고, 풀이를 보고도 너무 헷갈렸다.
후기
- 레벨2인데도 쉽지 않다...
'알고리즘 > 알고리즘 문제' 카테고리의 다른 글
[python] 프로그래머스 > 귤고르기 (0) | 2023.05.30 |
---|---|
[python] 프로그래머스 > 구명보트 (0) | 2023.05.30 |
[python] 프로그래머스 > 마법의 엘리베이터 (0) | 2023.05.25 |
[python] 프로그래머스 > H-index (0) | 2023.05.23 |
[python] 프로그래머스 > 이진변환반복하기 (0) | 2023.05.18 |