코테/프로그래머스

[프로그래머스/Lv. 2] 연속된 부분 수열의 합 (JAVA)

imname1am 2023. 10. 30. 11:03
반응형

🔺 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.util.*;
 
class Solution {    
    public int[] solution(int[] sequence, int k) {
        int[] answer = new int[] {0, sequence.length - 1};
        
        int left = 0;
        int right = 1;
        
        int sum = sequence[0];
        
        while(left < right) {
            if(sum == k) {
                change(right, left, answer);
                sum -= sequence[left++];
            }
            else if(sum > k) {
                sum -= sequence[left++];
            }
            else if(right < sequence.length) {
                sum += sequence[right++];
            }
            else {
                break;
            }
        }
 
        return answer;
    }
    
    private static void change(int right, int left, int[] answer) {
        if((right - 1 - left) < (answer[1- answer[0])) { // 기존 left와 right 길이보다 짧다면 갱신
            answer[0= left;
            answer[1= right - 1;
        }
    }
}
cs

 

 

🧩  해결 아이디어

• 투 포인터 

- 시간 복잡도 : O(N)

 

 

💥 유의사항

right가 배열 마지막 인덱스보다 커지더라도 멈추면 안 됨.

left가 줄어들면서 sum과 k가 같아지는 구간이 있을 수 있으므로.

 


🔺 다른 풀이들

- 정렬도 하셨고...

 

[Java] 연속된 부분 수열의 합 - Lv2 프로그래머스

https://school.programmers.co.kr/learn/courses/30/lessons/178870 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞

mag1c.tistory.com

 

 

- 복습은 이것으로...

 

[프로그래머스 Level 2] 연속된 부분 수열의 합 (Java)

https://school.programmers.co.kr/learn/courses/30/lessons/152996문제 설명비내림차순으로 정렬된 수열이 주어질 때, 다음 조건을 만족하는 부분 수열을 찾으려고 합니다.기존 수열에서 임의의 두 인덱스의 원

velog.io

 

- 약간 내가 생각했던 풀이와 가장 비슷함.  Comparable compareTo로 정렬하셨다.

 

프로그래머스 - 연속된 부분 수열의 합(Java)

투포인터 문제입니다. 투포인터란, 두 가지의 포인터를 사용해 배열에서 조건과 일치하는 연속된 부분을 찾을 수 있는 방법입니다. 조건에 맞춰 서로 다른 두 가지의 포인터를 움직여야 합니다.

ksb-dev.tistory.com


💬 느낀 점

투 포인터 문제 50만년만에 봐서 이거 쓸 생각도 못 했다...

다시 알고리즘의 세계로...

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

 

[프로그래머스] 연속된 부분 수열의 합 Lv2 JAVA [투포인터][엄탱]

문제 링크 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.

tang25.tistory.com

 

반응형