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

 

이번에 볼 문제는 백준 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

+ Recent posts