※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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 |