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

 

이번에 볼 문제는 백준 24939번 문제인 Boardle이다.
문제는 아래 링크를 확인하자.

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

 

24939번: Boardle

Boardle 게임은 $N \times M$ 크기의 격자판에서 이루어집니다. 격자판의 마주보는 두 꼭짓점은 $(1, 1)$과 $(N, M)$입니다. 격자판의 $NM$개 칸 중 하나에 보물이 숨겨져 있습니다. 보물을 찾으면 게임에서

www.acmicpc.net

매 질문 Q에 대한 답을 들을 때마다 답의 후보를 새로운 직사각형 영역으로 추려나갈 수 있게 된다.

 

각 질문을 보고 답을 나타내는 직사각형 영역의 bound를 적절히 갱신해나가는 것으로 문제를 해결하자.

 

답이 매우 커질 수 있으므로 64비트 정수 자료형을 이용하여 답을 출력하자.

 

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

#include <iostream>
using namespace std;
typedef long long ll;

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

	ll nLow = 1, mLow = 1, nHigh, mHigh, Q; cin >> nHigh >> mHigh >> Q;
	
	while (Q--) {
		ll x, y, d; cin >> x >> y >> d;
		if (d == 1) nLow = max(nLow, x + 1), mLow = mHigh = y;
		else if (d == 2) nHigh = min(nHigh, x - 1), mLow = mHigh = y;
		else if (d == 3) nLow = nHigh = x, mHigh = min(mHigh, y - 1);
		else if (d == 4) nLow = nHigh = x, mLow = max(mLow, y + 1);
		else if (d == 5) nLow = max(nLow, x + 1), mLow = max(mLow, y + 1);
		else if (d == 6) nHigh = min(nHigh, x - 1), mLow = max(mLow, y + 1);
		else if (d == 7) nLow = max(nLow, x + 1), mHigh = min(mHigh, y - 1);
		else if (d == 8) nHigh = min(nHigh, x - 1), mHigh = min(mHigh, y - 1);
		else nLow = nHigh = x, mLow = mHigh = y;
	}

	cout << (nHigh - nLow + 1) * (mHigh - mLow + 1);
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 24941 // C++] 줄넘기  (0) 2022.04.09
[BOJ 24940 // C++] Split the GSHS  (0) 2022.04.08
[BOJ 24938 // C++] 키트 분배하기  (0) 2022.04.06
[BOJ 24937 // C++] SciComLove (2022)  (0) 2022.04.05
[BOJ 24936 // C++] Trip Odometer  (0) 2022.04.04

+ Recent posts