※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 25335번 문제인 Gravity Hackenbush이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/25335
25335번: Gravity Hackenbush
첫째 줄에 점과 선의 개수를 나타내는 정수 $N, M$이 공백으로 구분되어 주어진다. ($1 \leq N \leq 200\,000$, $0 \leq M \leq 500\,000$) 둘째 줄부터 $N$개의 줄에 $i$번 점의 좌표 $x_i, y_i$가 한 줄에 하나씩 공
www.acmicpc.net
어떤 선을 지우더라도 바로 다음 상황을 보면 지금까지 지우지 않은 모든 선에 (각자 자신이 건드릴 수 있는 색이면) 접근할 수 있으므로, hackenbush의 연결상태와 무관하게 답은 각 색상의 선의 개수에만 의존한다는 점을 관찰할 수 있다.
각자 차례로 초록색 선부터 없애나가고, 초록색 선이 없다면 자신이 지울 수 있는 색의 선을 하나씩 지워나가는 것이 최선의 전략이므로, 이를 반복문을 통해 시뮬레이션을 돌려 문제를 해결하자.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int tmp;
int N, M;
int R, G, B;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
while (N--) cin >> tmp >> tmp;
while (M--) {
char c; cin >> tmp >> tmp >> c;
if (c == 'R') R++;
else if (c == 'G') G++;
else B++;
}
while (1) {
if (G) G--;
else if (R) R--;
else {
cout << "jhnan917";
return 0;
}
if (G) G--;
else if (B) B--;
else {
cout << "jhnah917";
return 0;
}
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 27648 // C++] 증가 배열 만들기 (0) | 2023.03.06 |
---|---|
[BOJ 27512 // C++] 스네이크 (0) | 2023.03.05 |
[BOJ 1983 // C++] 숫자 박스 (0) | 2023.03.05 |
[BOJ 27621 // C++] Sum of Three Cubes (0) | 2023.03.04 |
[BOJ 27627 // C++] Splitology (0) | 2023.03.04 |