말랑한 하루

[BAEKJOON] 17203, 11441, 11969 본문

문제풀이/BAEKJOON Online Judge

[BAEKJOON] 17203, 11441, 11969

지수는말랑이 2023. 12. 20. 17:31
반응형

※ 소스코드는 각 문제 설명 하단에 <더보기>를 통해 확인하실 수 있습니다.

 

[sliver 4, 17203 ∑|ΔEasyMAX|] - 누적 합(Prefix Sum)

1차원 누적 합 문제, 문제에서 요구하는 누적 합의 표본이 무엇인지 파악해야 한다.

더보기
#include <iostream>
#include <algorithm>
#pragma warning(disable:4996)

using namespace std;

int N, Q, st, ed;
int num[1001];
int sub[1001];
int prefixSum[1001];
int main() {
	scanf("%d %d", &N, &Q);
	for (int i = 1; i <= N; i++) scanf("%d", &num[i]);
	for (int i = 1; i <= N; i++) {
		sub[i] = abs(num[i] - num[i - 1]);
		prefixSum[i] = sub[i] + prefixSum[i - 1];
	}
	for (int i = 0; i < Q; i++) {
		scanf("%d %d", &st, &ed);
		st == ed ? printf("0\n") : printf("%d\n", prefixSum[ed] - prefixSum[st]);
	}
}

 

[sliver 3, 11441 합 구하기] - 누적 합(Prefix Sum)

1차원 누적 합 문제

더보기
#include <iostream>
#pragma warning(disable:4996)

using namespace std;

int N, M, st, ed;
int num[100001];
int prefixSum[100001];
int main() {
	scanf("%d", &N);
	for (int i = 1; i <= N; i++) scanf("%d", &num[i]);
	for (int i = 1; i <= N; i++) prefixSum[i] = num[i] + prefixSum[i - 1];
	scanf("%d", &M);
	for (int i = 0; i < M; i++) {
		scanf("%d %d", &st, &ed);
		printf("%d\n", prefixSum[ed] - prefixSum[st - 1]);
	}
}

 

[sliver 3, 11969 Breed Counting] - 누적 합(Prefix Sum)

1차원 누적 합 문제, 하지만 누적 합을 계산할 때 다뤄야 할 데이터는 단일 ID에 대한 카운팅이므로 구조체를 활용해 풀어가는 것을 추천한다.

더보기

convenient : 편리한(형) [conveniently]
lie : 거짓말, <사람/동물>(down, back), <송장>(at, in), 위치
within : ~이내에, ~을 넘지않고, ~의 범위 내에서
certain : 확신하는, 일정한
intervals : 간격

더보기
#include <iostream>
#pragma warning(disable:4996)

using namespace std;

int N, Q, id, st, ed;

typedef struct data {
	int fs, se, th;
}Data;

int num[100001];
Data prefixSum[100001];

int main() {
	scanf("%d %d", &N, &Q);
	for (int i = 1; i <= N; i++) scanf("%d", &num[i]);
	for (int i = 1; i <= N; i++) {
		prefixSum[i] = prefixSum[i - 1];
		switch (num[i]) {
		case 1:
			prefixSum[i].fs = prefixSum[i - 1].fs + 1;
			break;
		case 2:
			prefixSum[i].se = prefixSum[i - 1].se + 1;
			break;
		case 3:
			prefixSum[i].th = prefixSum[i - 1].th + 1;
		}
	}
	for (int i = 0; i < Q; i++) {
		scanf("%d %d", &st, &ed);
		printf("%d %d %d\n", prefixSum[ed].fs - prefixSum[st - 1].fs, 
			prefixSum[ed].se - prefixSum[st - 1].se, 
			prefixSum[ed].th - prefixSum[st - 1].th);
	}
}
반응형

'문제풀이 > BAEKJOON Online Judge' 카테고리의 다른 글

[BAEKJOON] 1600, 2146, 2636  (0) 2023.12.22
[BAEKJOON] 10986, 11997, 16507, 16713, 10211  (0) 2023.12.21
[BAEKJOON] 11659, 11660, 9328  (0) 2023.12.15
[BAEKJOON] 1330, 1926, 15428  (0) 2023.12.11
[BAEKJOON] 2240, 6198, 15681  (0) 2023.12.07
Comments