[실버3] [C++] 2559번: 수열

2023. 11. 26. 23:31·[게임 개발] 알고리즘 공부/백준

링크

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

 

2559번: 수열

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

www.acmicpc.net

문제

입출력 예제

코드

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main(void)
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	int n, k;

	cin >> n >> k;

	vector<int> temper(n);
	vector<int> sum;

	for (int i = 0; i < n; i++)
	{
		cin >> temper[i];
	}

	int start = 0;
	int end = k - 1;
	int temp = 0;

	for (int i = start; i <= end; i++)
	{
		temp += temper[i];
	}
	sum.push_back(temp);


	while (end < n - 1)
	{
		temp -= temper[start++];
		temp += temper[++end];
		sum.push_back(temp);
	}
	sort(sum.begin(), sum.end(), greater<>());

	cout << sum[0];
}

풀이

슬라이딩 윈도우는 연속적인 데이터나 배열에서 고정된 크기의 창(윈도우)를 이용하여 특정 연산을 수행하는 기술입니다. 이는 배열 또는 연속적인 데이터 구조에서 부분적인 데이터에 대한 작업을 수행하는 데 유용합니다. 주로 부분합, 부분곱, 특정 범위 내의 최소값 또는 최대값을 찾는 데 사용됩니다.

 

해당 문제는 투포인터를 사용하여 풀었고 그 중, 슬라이딩 윈도우를 사용하였습니다.

슬라이딩 윈도우는 창문을 밀듯이 일정 범위를 옆으로 옮겨가며 값을 찾는 알고리즘입니다.

다음과 같은 배열에서 연속된 5개의 수의 합 중 가장 큰 값을 찾기 위해

 

이런식으로 5개의 수를 범위로 지정해두고 옆으로 옮겨가며 총 합 중에서 가장 큰 값을 찾는것 입니다!

 

 

 

start와 end 포인터를 통해서 해당 지점들 사이의 수를 모두 더해 sum에 저장합니다.

 

이후 sum에서 start의 값을 빼고, start와 end를 증가시키고 sum에 증가된 end의 값을 더하면
그림과 같이 크기를 유지한채로 범위가 옆으로 한칸 옮겨가는 것을 확인할 수 있습니다.

 

해당 과정을 반복하여 모든 범위의 합을 저장한 후 그 중 가장 큰 값을 찾아 출력하면 끝입니다!

저작자표시 (새창열림)

'[게임 개발] 알고리즘 공부 > 백준' 카테고리의 다른 글

[실버2] [C++] 11053번: 가장 긴 증가하는 부분 수열  (1) 2023.12.17
[실버3] [C++] 3273번: 두 수의 합  (0) 2023.11.23
[C++][실버5] 11728번: 배열 합치기  (1) 2023.11.22
[C++] [골드 5] 1911번: 흙길 보수하기  (1) 2023.10.17
[C++] [골드 5] 1092번: 배  (0) 2023.10.16
'[게임 개발] 알고리즘 공부/백준' 카테고리의 다른 글
  • [실버2] [C++] 11053번: 가장 긴 증가하는 부분 수열
  • [실버3] [C++] 3273번: 두 수의 합
  • [C++][실버5] 11728번: 배열 합치기
  • [C++] [골드 5] 1911번: 흙길 보수하기
람팜팜~
람팜팜~
:)
  • 람팜팜~
    RumPumPum
    람팜팜~
  • 전체
    오늘
    어제
    • 전체 (123)
      • 🎵 일상 (2)
      • JAVA (5)
        • 김영한의 자바 입문 (3)
      • JavaScript (12)
      • ---------------------------.. (0)
      • [게임 개발] 포트폴리오 (2)
        • RPG (1)
        • 슈터-플랫포머 (1)
      • [게임 개발] 개발 일지 (28)
        • RPG (25)
        • TopDownProject (3)
      • [게임 개발] 언리얼엔진 공부 (9)
        • 이득우의 언리얼 프로그래밍 Part.1 (6)
        • 이득우의 언리얼 프로그래밍 Part.2 (1)
        • 개인 메모 (2)
      • [게임 개발] 알고리즘 공부 (60)
        • 프로그래머스 (8)
        • 백준 (52)
        • 개인 메모 (0)
      • [게임 개발] CPP 공부 (2)
        • 이것이 C++ 이다 (1)
        • Effective C++ (0)
        • Effective Modern C++ (0)
        • 홍정모 그래픽스 새싹코스 (1)
      • [게임 개발] CS 공부 (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      context switching
      문자열
      dp
      스레드
      우선순위 큐
      해시
      메모리구조
      데드락
      투포인터
      브루트포스
      슬라이딩 윈도우
      그리디
      참조자
      dfs
      누적합
      역참조
      프로세스
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    람팜팜~
    [실버3] [C++] 2559번: 수열
    상단으로

    티스토리툴바