티스토리 뷰
728x90
반응형
- 알고리즘 분류: 구간합, 누적합, 수학
- 난이도: Silver3
- 문제내용:
- 전체 날짜 수 N과 연속적인 날짜의 수 K와 전체 날짜를 준다.
- 연속적인 K일 온도의 합중 가장 큰것을 구해라
- 사이트 : https://www.acmicpc.net/problem/2559
문제풀이
이번 문제는 누적합, 구간합 기본 문제이다. 개념이나 이론적인 설명은 아래에 사이트에 참조 하면된다.
https://jih3508.tistory.com/50
이번 문제는 최대 데이터가 100000이고 시간이 1초라서 아래와 같이 작성하면 O(N ^ 2)이 나오기 때문에 시간 초과가 나올것이다.
N, K = map(int, input().split())
array = list(map(int, input().split()))
max_value = -100 * K
for i in range(N - K):
max_value = max(max_value, sum(array[i: i + K]))
print(max_value)
시간 초과를 피할라면 O(NlogN)이하의 시간 복잡도가 나오는데 이번 구간합 누적합의 원리를 알면 O(N)의 시간이 걸린다.
- 누적합을 구한다.
- 최대 값을 저장한 변수를 선언한다.
- 다시 전체 index를 탐색하는데 자신의 index와 연속 K일 만큼 차이를 구해서 그중 큰 값을 최대 값으로 저장한다.
- 최대 값을 출력한다.
Code
Python
N, K = map(int, input().split())
array = list(map(int, input().split()))
s = [0, array[0]]
for i in range(1, N):
s.append(array[i] + s[i])
max_value = -100 * K
for i in range( N - K + 1):
max_value = max(max_value, s[i + K] - s[i])
print(max_value)
Java
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 {
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[] array = new int[N];
st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++) {
array[i] = Integer.parseInt(st.nextToken());
}
int[] s = new int[N + 1];
for(int i = 0; i < N; i++) {
s[i + 1] = s[i] + array[i];
}
int max_value = -100 * K;
for(int i = 0; i <= N - K ; i++) {
max_value = Math.max(max_value, s[i + K] - s[i]);
}
System.out.println(max_value);
}
}
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[BAEKJOON] 2566 최댓값 (0) | 2022.11.09 |
---|---|
[BAEKJOON] 16139 인간-컴퓨터 상호작용 (0) | 2022.11.09 |
[BAEKJOON] 2566 최댓값 (2) | 2022.11.08 |
[BAEKJOON] 11054 가장 긴 바이토닉 부분 수열 (0) | 2022.11.07 |
[BAEKJOON] 2565 전깃줄 (0) | 2022.11.03 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Programmerse
- BFS
- 구현
- level2
- 동적 계획법
- Python
- LeetCode
- DFS
- 파이썬
- java
- 알고리즘
- 배열
- Greedy
- 동적계획법
- 이론
- 넓이 우선 탐색
- 자바
- 수학
- 누적합
- 그래프
- 그리디
- 백트레킹
- BaekJoon
- 조합
- 문자열
- 재귀호출
- 백준
- JSCODE
- DP
- spring-boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함