Algorithm & SQL/BAEKJOON
백준 JAVA 2559 수열
YoonJong
2022. 9. 1. 22:30
728x90
반응형
https://www.acmicpc.net/problem/2559
2559번: 수열
첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기
www.acmicpc.net
조금만 고민하면 어렵지 않게 풀리는 문제였다.
제출하고 한번 틀렸는데 이유는 아래와 같다.
// 입력받은 값들이 전부 - 일때도 있기때문에 0으로 초기화하면 틀림
int answer = Integer.MIN_VALUE;
조건에서 -100 ~ 100 까지의 값이 들어올 수 있으므로, 전부다 음수만 들어올 수 있다.
수정 전에 0 으로 초기화를 했는데, 이러면 답이 0 으로 밖에 나올 수 없다.
따라서 최대 , 최소값을 구할때는 Integer.MIN 또는 MAX 를 사용해서 푸는 것이 바람직하다.
while (s + k <= n) {
int max = 0;
for (int i = s; i < s + k; i++) {
max += arr[i];
}
answer = Math.max(answer, max);
s++;
}
while문을 사용했다. 조건은 s+k 이며, s 는 스타트값 0 이고 k는 몇개세는지에 대한 값이다.
for문을 돌릴 때는, k 만큼의 수를 더해야 하므로, s ~ s+k 의 값을 구한다.
answer 에는 Math.max 를 이용해서 처음부터 끝까지 돌린 수 중 가장 큰값을 넣어준다.
package BAEKJOON.Silver.Ⅲ;
/**
* 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
* 1 초 128 MB 22361 8203 6682 36.454%
*/
import java.util.Scanner;
public class NO2559 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); //정수의 개수
int k = sc.nextInt(); //연속 몇개
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
int s = 0;
// 입력받은 값들이 전부 - 일때도 있기때문에 0으로 초기화하면 틀림
int answer = Integer.MIN_VALUE;
while (s + k <= n) {
int max = 0;
for (int i = s; i < s + k; i++) {
max += arr[i];
}
answer = Math.max(answer, max);
s++;
}
System.out.println(answer);
}
}
728x90
반응형