알고스팟 문제 링크: https://algospot.com/judge/problem/read/ITES
algospot.com :: ITES
외계 신호 분석 문제 정보 문제 수환이는 외계에서 날아오는 전파를 연구하는 범세계 대규모 프로젝트, ITES@home에 참가하고 있습니다. 외계에서 날아오는 전파는 전처리를 거쳐 각 숫자가 [1,10000
algospot.com
숫자들이 순차적으로 주어졌을때 해당 수열의 부분수열 합이 k인 경우의 수를 찾는 문제이다.
수열의 길이가 최대 50000000인것을 감안하면 수열을 값을 미리 계산하여 배열을 선언하고 거기에 담는 방식은 불가능 하다.
다른 방법으로는 프로그램이 실행될때 실시간으로 값을 생성하는것이 있다.
이를 위해서 구조체와 메서드를 작성하고 순차적으로 값을 생성해서 큐에 넣어 관리한다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<iostream> | |
#include<queue> | |
using namespace std; | |
int k, n; | |
// 실시간으로 입력을 생성하기 위한 구조체 | |
struct RNG { | |
unsigned seed; | |
RNG() : seed(1983) {} | |
unsigned next() { | |
unsigned ret = seed; | |
seed = ((seed * 214013u) + 2531011u); | |
return ret % 10000 + 1; | |
} | |
}; | |
// 신호분석 | |
int ites() { | |
queue<int> q; | |
int result = 0, queSum = 0; | |
RNG rng; | |
// n개의 신호를 순회한다. | |
for (int i = 0; i < n; i++) { | |
// 신호생성 | |
int newSignal = rng.next(); | |
q.push(newSignal); | |
queSum += newSignal; | |
// 큐에 들어있는 신호들의 합이 k이상이면 순서대로 신호 pop | |
while (queSum >= k) { | |
// 큐에 들어있는 신호들의 합이 k면 result++ | |
if (queSum == k) | |
result++; | |
queSum -= q.front(); | |
q.pop(); | |
} | |
} | |
return result; | |
} | |
int main() { | |
int testcase; | |
cin >> testcase; | |
while (testcase--) { | |
cin >> k >> n; | |
cout << ites() << endl; | |
} | |
} |
코드 원본: https://github.com/sbl133/JongmanBook/blob/main/19.%20QueueStackDeque/ITES.cpp
GitHub - sbl133/JongmanBook
Contribute to sbl133/JongmanBook development by creating an account on GitHub.
github.com

댓글을 통한 코드리뷰, 질문, 지적 언제든 환영입니다!
reference: 프로그래밍 대회에서 배우는 알고리즘 문제해결전략2
'Algorithm > algospot' 카테고리의 다른 글
algospot 말버릇 (문제 ID: HABIT) c++ (0) | 2021.10.04 |
---|---|
algospot 재하의 금고 (문제 ID: JAEHASAFE) c++ (0) | 2021.09.30 |
algospot 짝이 맞지 않는 괄호(문제 ID: BRACKETS2) c++ (0) | 2021.09.28 |
algospot 조세푸스 문제 (문제 ID: JOSEPHUS) c++ (0) | 2021.09.27 |
algospot 크리스마스 인형 (문제 ID: CHRISTMAS) c++ (0) | 2021.09.27 |