배열에서 특정 구간을 설정하고 구간별 데이터를 비교해야할때 사용하기 용이한 알고리즘
ex) 매출기록이 배열로 주어질때 변수 k일간의 최대매출기록을 구하라
// n일간 매출기록
// k = k일간의 연속매출
// arr = 매출 array
// k일간의 최대매출기록은?
public static int solution(int n, int k, int[] arr) {
int answer = 0; // 최대 매출기록으로 갱신될 변수
int sum = 0;
for(int i=0; i<k; i++) { // 일단 k번째 까지의 요소를 전부 더해준다.
sum += arr[i];
}
answer = sum; // 현시점까지의 최대매출기록
for(int j=k; j<n; j++) { // 이제 한칸씩 증감하여 최대매출기록을 갱신해준다.
sum += (arr[j] + arr[j-k]); // j-k == 3-3.. 4-3... 5-3... 한칸씩 당겨진다.
answer = Math.max(answer, sum);
}
return answer;
}
기준이될 k까지의 배열의 수로 데이터를 초기화 하고 반복문 수행 시 인덱스 값을 더하고
뒤에서 마지막(j-k)번째의 데이터를 제외 시키면 구간 k수만큼의 최대매출기록을 알 수 있다.
'알고리즘' 카테고리의 다른 글
[알고리즘] two pointers (0) | 2022.06.01 |
---|---|
[알고리즘] 에라토스테네스 체 (0) | 2022.05.12 |
[알고리즘] 다양한 정렬 알고리즘 (0) | 2022.04.28 |
[알고리즘] 숫자를 뒤집기 (0) | 2022.04.06 |
[프로그래머스] 모의고사 (0) | 2022.03.04 |
댓글