Search

연속된 부분 수열의 합

알고리즘
연습문제
플랫폼
프로그래머스
JCF
상태
해결
생성 일시
2024/02/05 08:31
최종 편집 일시
2024/02/06 08:28

문제 설명

해결과정

Solution.java

class Solution { public int[] solution(int[] sequence, int k) { // 조건을 만족하는 부분수열의 인덱스 값을 반환할 정수형 배열 answer int[] answer = new int [2]; // 부분수열의 원소들의 합 int totalNum = 0; // 부분수열의 길이 int totalLength = sequence.length; // 부분수열의 첫번째 원소 int firstIndex = 0; // 부분수열을 찾기 위한 for문 실행 for(int i = 0; i < sequence.length; i++) { // 부분수열의 원소 totalNum += sequence[i]; // 부분수열의 합이 k와 같다면 if(k == totalNum) { // 현재 가장 짧은 길이의 부분수열 보다 짧은지 확인 if((i-firstIndex+1) < totalLength) { answer[0] = firstIndex; answer[1] = i; totalLength = i-firstIndex+1; } } // 부분수열의 합이 k보다 크다면 else if (k < totalNum) { while(k < totalNum) { // 부분수열의 맨 앞 원소들을 하나씩 제거해준다. totalNum -= sequence[firstIndex]; firstIndex++; } if(k == totalNum) { // 현재 가장 짧은 길이의 부분수열 보다 짧은지 확인 if((i-firstIndex+1) < totalLength) { answer[0] = firstIndex; answer[1] = i; totalLength = i-firstIndex+1; } } } } if(firstIndex == 0 && totalNum == k) { answer[0] = 0; answer[1] = sequence.length-1; } return answer; } }
Java
복사