티스토리 뷰

Algorithm

[백준] S3 2559 수열 (java)

코딩브론즈 2021. 1. 4. 02:44

www.acmicpc.net/problem/2559

 

2559번: 수열

첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기

www.acmicpc.net

 

풀이

 

1) 먼저 입력값을 저장할 배열을 만듬

2) 배열의 0~K-1 까지 원소의 합을 sum과 max에 저장함

3) K = N 이면 max 출력

4) K != N 이면 K부터 N까지 sum에 다음 숫자를 더하고 처음숫자를 빼서 max 갱신

5) max 출력

 

주의사항

 

1) K = N 일 경우

2) 맨처음 max = sum

 

package com.baekJoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.StringTokenizer;

public class BJ_S3_2559_수열 {
	static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
	static StringTokenizer tokens;
	static int N,K,arr[];
	public static void main(String[] args) throws NumberFormatException, IOException {
		input = new BufferedReader(new StringReader(src));
		tokens = new StringTokenizer(input.readLine());
		N = Integer.parseInt(tokens.nextToken());
		K = Integer.parseInt(tokens.nextToken());
		arr = new int[N];
		tokens = new StringTokenizer(input.readLine());
		for(int n=0; n<N; n++) {
			arr[n] = Integer.parseInt(tokens.nextToken());
		}
		int sum = 0;
		int max = 0;
		for(int k=0; k<K; k++) {
			sum += arr[k];
		}
		max = sum;
		if(N==K) {
			System.out.println(max);
		}else {
			for(int n=K; n<N; n++) {
				sum+=arr[n];
				sum-=arr[n-K];
				if(max < sum) {
					max = sum;
				}
			}
			System.out.println(max);
		}
	}

	static String src =
			"10 10\r\n" + 
			"3 -2 -4 -9 0 3 7 13 8 -3";
}

 

 

후기

 

주의사항에 적은 부분때문에 2번이나 틀렸다. 젠장.. 아직 수련이 부족하다.

정답 비율이 34.9% 인데 거의 나랑 비슷한 실수를 한게 아닌가 싶다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함