anott
기록
anott
  • 분류 전체보기
    • 오라클
    • SQL
    • 알고리즘
      • 백준저지
      • 프로그래머스
      • SWEA
    • 개발 관련
    • 프론트엔드
      • TypeScript, Next.js
      • React 공식문서 읽기
hELLO · Designed By 정상우.
anott

기록

알고리즘/백준저지

백준저지 2559번 수열

2021. 8. 15. 23:53

출처: https://www.acmicpc.net/problem/2559

 

2559번: 수열

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

www.acmicpc.net

 

제출 날짜: 2021년 8월 15일 일요일

 

 

 

생각

구간합을 여러 번 구해서 그중 가장 큰 값을 구하는 문제다. 난이도가 실버3이라 그냥 구하면 안 될 것 같다는 생각이 들어서 알고리즘 분류를 보았더니 두 포인터라고 적혀있었다. 그런데 두 포인터를 검색했더니 자연수일 때 적용된다는 말이 있어서 이것과는 조금 다른 경우인 것 같았다.

결국 이중 for문을 사용하지 않는 아래 질문글에서 문제 해결 방법을 찾을 수 있었다. 0번째부터 K개만큼 더한 뒤 그다음부터는 맨 앞의 숫자를 빼고 추가로 하나를 더하는 방식이다.

https://www.acmicpc.net/board/view/56356

 

 

 

코드

// 출처: 백준저지 2559번 수열 https://www.acmicpc.net/problem/2559

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

public class BOJ2559 {
    public static void main(String[] args) throws IOException {
        int max = 0; // 답
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken()); // 온도를 측정한 전체 날짜의 수. (2 이상 100,000 이하)
        int K = Integer.parseInt(st.nextToken()); // 합을 구하기 위한 연속적인 날짜의 수
        int[] temperature = new int[N]; // 온도 저장
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            temperature[i] = Integer.parseInt(st.nextToken()); // 온도 입력 받아 저장
        }

        for (int i = 0; i < K; i++) {
            max = max + temperature[i]; // 0번째부터 K개만큼 온도 구간 우선 더하기. 우선 max로 놓기
        }
        int temp = max; // 구간 온도의 합. temp로 아래 계산을 할 것
        for (int i = K; i < N; i++) {
            // 시간 초과를 해결하기 위해서
            // 1번쨰부터 K개만큼의 온도 구간: 0번째부터 K개만큼 온도 구간 - 0번째 + K번째
            temp = temp - temperature[i - K] + temperature[i];
            max = Math.max(max, temp); // 더 큰 수를 저장
        }

        System.out.println(max); // 답
    }
}
저작자표시 비영리

'알고리즘 > 백준저지' 카테고리의 다른 글

백준저지 9375번 패션왕 신해빈  (0) 2021.08.17
백준저지 2435번 기상청 인턴 신현수  (0) 2021.08.16
백준저지 2605번 줄 세우기  (0) 2021.08.15
백준저지 3040번 백설 공주와 일곱 난쟁이  (0) 2021.08.12
백준저지 2563번 색종이  (0) 2021.08.10
    '알고리즘/백준저지' 카테고리의 다른 글
    • 백준저지 9375번 패션왕 신해빈
    • 백준저지 2435번 기상청 인턴 신현수
    • 백준저지 2605번 줄 세우기
    • 백준저지 3040번 백설 공주와 일곱 난쟁이
    anott
    anott

    티스토리툴바