※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 21318번 문제인 피아노 체조이다.
문제는 아래 링크를 확인하자.

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

 

21318번: 피아노 체조

피아노를 사랑하는 시은이는 매일 아침 피아노 체조를 한다. 시은이는 N개의 악보를 가지고 있으며, 1번부터 N번까지의 번호로 부른다. 각 악보는 1 이상 109 이하의 정수로 표현되는 난이도를

www.acmicpc.net

1 이상 N 미만의 정수 i에 대하여 arr[i]를 'i + 1번 악보보다 i번 악보가 어렵다면 1, 그렇지 않으면 0'로 정의하자. 이 때 각 쿼리가 요구하는 값은 배열 arr의 구간합으로 생각할 수 있다.

 

배열 arr이 업데이트되는 일이 없으므로 prefix sum 배열을 만들어 문제를 해결하자. 이를 구현할 때 N개의 악보를 살펴볼 때 살펴봐야 하는 arr값의 수는 N - 1개가 되므로 인덱스의 관리에 유의하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int N, Q;
int arr[100001];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> N;
	for (int i = 1; i <= N; i++) cin >> arr[i];
	for (int i = 1; i < N; i++) {
		if (arr[i] > arr[i + 1]) arr[i] = 1;
		else arr[i] = 0;
		arr[i] += arr[i - 1];
	}

	cin >> Q;
	while (Q--) {
		int L, R; cin >> L >> R;
		cout << arr[R - 1] - arr[L - 1] << '\n';
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 6005 // C++] Cow Pinball  (1) 2024.02.05
[BOJ 11909 // C++] 배열 탈출  (0) 2024.02.04
[BOJ 16401 // C++] 과자 나눠주기  (0) 2024.02.02
[BOJ 10565 // C++] Salary Inequity  (1) 2024.02.01
[BOJ 1888 // C++] 곰팡이  (0) 2024.01.31

+ Recent posts