21921번 - 블로그 | 슬라이딩 윈도우 알고리즘 (C++)

2024. 7. 26. 23:10·Programming/C++ - 백준
반응형


문제


풀이

슬라이딩 윈도우 알고리즘을 이용해 풀이했다.

 

아래의 문제와 풀이 과정이 유사하지만, 이 문제의 다른 점은 가장 많이 들어온 방문자 수와 함께 기간의 개수도 함께 출력해야 하는 것이다.

 

예를 들어 예제 입력 2의 경우에는 '1 1 1 1 5', '1 1 1 5 1'로 총 방문자 수가 9인 기간 두 개가 있기 때문에 출력 값이 '9 2'가 된다.

 

따라서, 기간의 개수를 세기 위해 cnt 값을 추가해주어야 한다.

 

 

2559번 - 수열 | 슬라이딩 윈도우 알고리즘 (C++)

문제풀이슬라이딩 윈도우 알고리즘을 이용해 풀이했다.   1. 0부터 k-1까지는 모두 sum에 더한다. 이때, 최대가 되는 합을 저장할 answer에 sum의 값을 넣는다. for (int i = 0; i     2. k부터 n-1까지는 ar

jigoo-log.tistory.com

 

  1. 0부터 x-1까지는 모두 sum에 더한다. 이때, 최대가 되는 합을 저장할 answer에 sum의 값을 넣는다.

	for (int i = 0; i < x; i++) {
		sum += arr[i];
	}

	answer = sum;
	cnt = 1;

 

 

  2. x부터 n-1까지는 arr[i]는 sum에 더하고, arr[i - k]는 sum에서 뺀다. answer과 sum 중 최댓값을 answer에 저장한다.

    최대 조회수인 기간이 갱신되면(sum > answer), cnt를 1로 초기화 해야한다.

    또한, 같은 최대 조회수 기간이 더 있다면(sum == answer), cnt 값을 1 증가시켜야한다.

	for (int i = x; i < n; i++) {
		sum += arr[i];
		sum -= arr[i - x];
		if (sum > answer) {
			answer = sum;
			cnt = 1;	// 최대 조회수인 기간이 갱신되면, cnt도 1로 초기화
		}
		else if (sum == answer) {
			cnt++;		// 같은 최대 조회수인 기간이 더 있다면 cnt++
		}
	}

 

 

  3. answer이 0인 경우에는 SAD를 출력, 아닌 경우에는 answer과 cnt를 차례로 출력한다.

 

	if (answer == 0) {
		cout << "SAD";
	}
	else {
		cout << answer << "\n";
		cout << cnt;
	}

코드

#include <iostream>
#include <algorithm>
using namespace std;

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

	int n, x, cnt = 0, sum = 0, answer, max = -1;
	cin >> n >> x;

	int arr[250001];

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

	for (int i = 0; i < x; i++) {
		sum += arr[i];
	}

	answer = sum;
	cnt = 1;

	for (int i = x; i < n; i++) {
		sum += arr[i];
		sum -= arr[i - x];
		if (sum > answer) {
			answer = sum;
			cnt = 1;
		}
		else if (sum == answer) {
			cnt++;		// 최대 조회수인 기간이 더 있다면 cnt++
		}
	}

	if (answer == 0) {
		cout << "SAD";
	}
	else {
		cout << answer << "\n";
		cout << cnt;
	}

	return 0;
}

 


결과

 
 
반응형
저작자표시 (새창열림)

'Programming > C++ - 백준' 카테고리의 다른 글

2559번 - 수열 | 슬라이딩 윈도우 알고리즘 (C++)  (0) 2024.07.26
1620번-나는야 포켓몬 마스터 이다솜 | 스택 오버플로우 by 지역변수 (C++)  (0) 2024.06.25
1764번 - 듣보잡 | 시간초과, binary search (C++)  (1) 2024.04.03
[백준] 10816번 : 숫자 카드 2 | binary search & unordered map (C++)  (2) 2024.04.01
[백준] 1920번 : 수 찾기 | binary search (C++)  (0) 2024.04.01
'Programming/C++ - 백준' 카테고리의 다른 글
  • 2559번 - 수열 | 슬라이딩 윈도우 알고리즘 (C++)
  • 1620번-나는야 포켓몬 마스터 이다솜 | 스택 오버플로우 by 지역변수 (C++)
  • 1764번 - 듣보잡 | 시간초과, binary search (C++)
  • [백준] 10816번 : 숫자 카드 2 | binary search & unordered map (C++)
지구코드
지구코드
IT를 공부하고 있는 지구의 코딩공간입니다!
  • 지구코드
    지구의 코딩공간
    지구코드
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 개발 기록
      • Back-end
        • Spring
        • Django
      • Programming
        • 알고리즘
        • C++ - 백준
      • Cloud
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    슬라이딩윈도우
    AWS
    부트캠프
    이진탐색
    알파코
    binary_search
    awscloudclubs
    KDT교육
    백준
    프로디지털아카데미
    fill 함수
    신한투자증권
    시간초과
    알파코캠퍼스
    Cloud
    피보나치 수
    구조체 벡터
    C++
    별 찍기
    프디아
    다이내믹 프로그래밍
    정렬
    k디지털트레이닝
    pair 클래스
    시간복잡도
    dp
    edgelocation
    큐
    부분 문자열 추출
    EC2
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
지구코드
21921번 - 블로그 | 슬라이딩 윈도우 알고리즘 (C++)
상단으로

티스토리툴바