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

 

이번에 볼 문제는 백준 3088번 문제인 화분 부수기이다.
문제는 아래 링크를 확인하자.

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

 

3088번: 화분 부수기

상근이는 K512 뒤쪽에 화분 N개를 놓았다. 태완이는 이 화분을 모두 부수어 버리려고 한다. 화분은 한 줄로 놓여져 있으며, 세 정수가 쓰여져 있다. 태완이가 화분 하나를 깼을 때, 그 화분에 쓰여

www.acmicpc.net

뒤의 어떤 화분을 깨더라도 앞의 화분이 깨지지는 않는 다는 점에 착안하면, 무조건 화분을 앞에서부터 깨는 것이 이득임을 알 수 있다.

 

화분에 써있는 숫자는 100만 이하이므로, 크기 100만의 배열을 만들고 앞서서 해당 숫자가 적힌 화분이 있었는지 확인하는 것으로 문제를 빠르게 해결할 수 있다.

 

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

#include <iostream>
using namespace std;

bool chk[1000001];

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

	int N; cin >> N;
	int cnt = 0;
	while (N--) {
		int x, y, z; cin >> x >> y >> z;
		if (!(chk[x] || chk[y] || chk[z])) cnt++;
		chk[x] = chk[y] = chk[z] = 1;
	}
	cout << cnt;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 17409 // C++] 증가 수열의 개수  (0) 2021.07.05
[BOJ 14860 // C++] GCD 곱  (0) 2021.07.04
[BOJ 13976 // C++] 타일 채우기 2  (0) 2021.07.02
[BOJ 5032 // C++] 탄산 음료  (0) 2021.07.01
[BOJ 21955 // C++] Split  (0) 2021.07.01

+ Recent posts