
99클럽 코테 스터디 5일차 TIL - 백준 2559번 : 수열백준2025. 4. 4. 22:10
Table of Contents
항해99 클럽 코테 스터디 5일차 TIL - 자바 미들러 4/4 (금요일)
https://www.acmicpc.net/problem/2559
✅ 문제
📌 접근방법
시간복잡도 고려
방법 1. O(N^2)
2중 포문으로 풀면 시간초과. (2<=N<=100,000), K는 1과 N사이의 정수
근데 K가 N에 가까워 지는 순간 시간 복잡도는 최악의 경우 O(NK) -> O(N^2)이 된다.
그러면 1초 넘는다.
방법 2. O(N)
슬라이딩 윈도우
인덱스 0번 지점부터 k-1번까지 미리 누적합을 구해둔 후, 윈도우를 한칸씩 밀어나간다.
그러면 탐색 과정에서 바로 직전의 인덱스를 제외하고, i + k 번째 값을 추가하면 된다.
그러면 2중 포문이 아니라 단일 포문으로 가능해진다.
🔑 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int[] num = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
num[i] = Integer.parseInt(st.nextToken());
}
int Max = 0;
for (int i = 0; i < K; i++) {
Max += num[i];
}
int Sum = Max;
for (int i = K; i < N; i++) {
Sum -= num[i - K];
Sum += num[i];
if (Max < Sum) Max = Sum;
}
System.out.println(Max);
}
}
// 2중 for문으로 풀면 시간초과 (최악의 케이스 5만(10만의 절반) * 5만 = 25억)
// 2중 for문 안 돌리고 슬라이딩 윈도우로 풀면 O(N)
실행코드
http://boj.kr/053ec6208cd841f4b7648bba628c675d
TIL
'백준' 카테고리의 다른 글
99클럽 코테 스터디 1일차 TIL - 백준 1929번 : 소수 구하기 (0) | 2025.03.31 |
---|---|
[누적합] 백준 2167번 : 2차원 배열의 합 - Java (0) | 2025.03.30 |
백준 7785번 : 회사에 있는 사람 - Java (0) | 2025.03.28 |
[정렬] 1427번 : 소트인사이드 - Java (0) | 2025.01.21 |
@킴준현 :: 차근차근 꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!