728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/178870
풀이 방법
이 문제는 인수의 길이를 확인하고 시간 복잡도를 생각해서 이중 for문을 사용하지 않고 풀어야하는 문제라 생각했다.나는 투포인터 알고리즘을 이용해 문제를 풀기로 했다.
고려해야 하는 상황은 3가지 이다.1. 부분 수열의 합이 k값보다 작고 오른쪽 포인트가 수열의 끝 인덱스보다 작을 때2. 부분 수열의 합이 k값과 같고 기존 수열의 범위와 비교해서 지금의 범위가 작을 때3. 부분 수열의 합이 k값 보다 크거나 작을 때
사실 투포인터 알고리즘에서는 아래와 같이 오른쪽 포인터가 증가하다가
왼쪽 포인터도 같이 증가하며 경우의 수를 확인하는 방식으로 진행했다.
코드
const solution = (sequence, k) => {
let answer = [0, sequence.length];
let [lp, rp] = [0, 0];
let sum = sequence[0];
while(lp < sequence.length){
if(sum < k && rp < sequence.length){
sum += sequence[++rp];
}
else if(sum === k && rp - lp < answer[1] - answer[0]){
answer = [lp, rp];
sum += sequence[++rp];
}
else{
sum -= sequence[lp++];
}
}
return answer;
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
2Level / 2022 KAKAO TECH INTERNSHIP / 두 큐 합 같게 만들기 (1) | 2023.10.07 |
---|---|
2Level / 월간 코드 챌린지 시즌1 / 쿼드압축 후 개수 세기 (0) | 2023.10.05 |
2Level / 연습 문제 / 택배상자 (0) | 2023.09.25 |
2Level / 연습 문제 / 2개 이하로 다른 비트 (0) | 2023.09.22 |
2Level / 연습 문제 / 2 x n 타일링 (0) | 2023.09.22 |