728x90
https://www.acmicpc.net/problem/2559
조금만 고민하면 어렵지 않게 풀리는 문제였다.
제출하고 한번 틀렸는데 이유는 아래와 같다.
// 입력받은 값들이 전부 - 일때도 있기때문에 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
'Algorithm & SQL > BAEKJOON' 카테고리의 다른 글
백준 JAVA 1940 주몽 (0) | 2022.09.02 |
---|---|
백준 JAVA 1620 나는야 포켓몬 마스터 이다솜 (0) | 2022.09.01 |
백준 JAVA 9996 한국이 그리울 땐 서버에 접속하지 (0) | 2022.09.01 |
백준 JAVA 11655 ROT13 (0) | 2022.08.31 |
백준 JAVA 1159 농구 경기 (0) | 2022.08.30 |
댓글