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

 

이번에 볼 문제는 백준 21967번 문제인 세워라 반석 위에이다.
문제는 아래 링크를 확인하자.

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

 

21967번: 세워라 반석 위에

$1 \leq N \leq 1\,000\,000$ $1 \leq A_i \leq 10$

www.acmicpc.net

주어질 수 있는 Ai의 범위가 1 이상 10 이하로 매우 작다는 점을 관찰하자. 이를 이용하면 각 반석이 가지고 있을 수 있는 수의 범위가 [1,3], [2,4], ..., [8,10]뿐임을 알 수 있다.

 

각 경우에 대해 직접 배열을 둘러보며 각 범위에 대한 반석의 최대 길이를 알아내자. 그리고 이 경우들 중 가장 긴 반석의 길이를 답으로 출력하자.

 

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

#include <iostream>
using namespace std;

int cnt[9];

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

	int N; cin >> N;
	int ans = 0;
	while (N--) {
		int x; cin >> x;
		if (x - 2 > 0) cnt[x - 2]++;
		if (x - 1 > 0) cnt[x - 1]++;
		cnt[x]++;

		for (int i = 1; i < x - 2; i++) {
			ans = max(ans, cnt[i]);
			cnt[i] = 0;
		}
		for (int i = x + 1; i < 9; i++) {
			ans = max(ans, cnt[i]);
			cnt[i] = 0;
		}
	}
	
	for (int i = 1; i < 9; i++) {
		ans = max(ans, cnt[i]);
	}

	cout << ans;
}
728x90

+ Recent posts