https://school.programmers.co.kr/learn/courses/30/lessons/178870
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
접근법1
이중 반복문을 통해 조건을 만족하는 부분 수열을 구하는 방식으로 진행했지만, 이중 반복문 사용으로 시간초과가 발생했습니다.
문제풀이
def solution(sequence, k):
answer = [0,1000000]
len_seq= len(sequence)
for i in range(len_seq) :
sum_i = 0
for j in range(i,len_seq) :
if sum_i+sequence[j] == k :
if answer[1]-answer[0] > j-i :
answer = [i,j]
break
elif sum_i+sequence[j] > k :
break
sum_i+=sequence[j]
return answer
접근법2
이중 반복문을 사용하면 사용시 시간초과 발생하기 때문에 투포인터 알고리즘을 사용하여 해결했습니다.
start, end 두 개의 포인터를 이동시키면서 진행했습니다. 만약 현재 합이 k보다 작으면 end를 우측으로 이동시키고, 현재 합이 k 보다 같거나 크면 start를 우측으로 이동시키면서 답을 구했습니다.
문제풀이
def solution(sequence, k):
answer = [0,1000000]
len_seq= len(sequence)
# 첫 인덱스의 값이 k일 경우를 위해 end는 -1부터 시작
start=0
end=-1
sum_cur=0
# 투포인터 알고리즘
while True :
# 합이 원하는 값보다 작을 경우 end를 우측으로 한칸 이동
if sum_cur < k :
end+=1
if end == len_seq : break
sum_cur+=sequence[end]
# 합이 원하는 값보다 크거나 같을 경우 start를 우측으로 한칸 이동
else :
if start == len_seq : break
sum_cur-=sequence[start]
start+=1
# 합이 원하는 값과 일치하고, 기존 answer 의 인덱스 차이보다 작으면 교체
if sum_cur == k :
if answer[1]-answer[0] > end-start :
answer = [start,end]
return answer
https://comhwang.tistory.com/4
[알고리즘] 투 포인터 알고리즘
투 포인터 알고리즘 리스트에 순차적으로 접근해야 할 때 두 개의 점의 위치를 기록하면서 진행하는 알고리즘입니다. 완전탐색 알고리즘 등을 사용하여 문제에 접근할 경우 테스트 케이스에 큰
comhwang.tistory.com
'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] 혼자서 하는 틱택토 (1) | 2023.08.03 |
|---|---|
| [프로그래머스] 과제 진행하기 (4) | 2023.07.31 |
| [프로그래머스] 배열 조각하기 (1) | 2023.04.21 |
| [프로그래머스] Lv.0 369게임 (JavaScript) (1) | 2023.04.14 |