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

 

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

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

 

주어진 세 직사각형을 겹치지 않게 이어붙여 정사각형을 구성할 수 있는지 묻는 문제이다.

 

정사각형을 세 직사각형으로 자르는 방법은 문제에서 그림으로 주어진 두 방법밖에 없음을 관찰하면, 주어진 문제는 두 직사각형을 합쳐 다른 직사각형을 얻는 과정을 두 번 (가능한 대로) 반복해 정사각형을 얻을 수 있는지 확인하는 것으로 해결할 수 있다.

 

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

#include <iostream>
#include <utility>
using namespace std;

int A, B, C, D, E, F;
bool chk;
void func(int W, int X, int Y, int Z) {
	if (W == Y && X + Z == Y) chk = 1;
	if (W == Z && X + Y == Z) chk = 1;
	if (X == Y && W + Z == Y) chk = 1;
	if (X == Z && W + Y == Z) chk = 1;
}

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

	cin >> A >> B >> C >> D >> E >> F;
	if (A == C) func(A, B + D, E, F);
	if (A == D) func(A, B + C, E, F);
	if (B == C) func(B, A + D, E, F);
	if (B == D) func(B, A + C, E, F);
	swap(A, C); swap(C, E);
	swap(B, D); swap(D, F);
	if (A == C) func(A, B + D, E, F);
	if (A == D) func(A, B + C, E, F);
	if (B == C) func(B, A + D, E, F);
	if (B == D) func(B, A + C, E, F);
	swap(A, C); swap(C, E);
	swap(B, D); swap(D, F);
	if (A == C) func(A, B + D, E, F);
	if (A == D) func(A, B + C, E, F);
	if (B == C) func(B, A + D, E, F);
	if (B == D) func(B, A + C, E, F);

	if (chk) cout << "YES";
	else cout << "NO";
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 32065 // C++] Short Function  (0) 2024.08.28
[BOJ 24539 // C++] 암호 해독  (0) 2024.08.27
[BOJ 17797 // C++] Dome Construction  (0) 2024.08.25
[BOJ 1999 // C++] 최대최소  (0) 2024.08.24
[BOJ 3165 // C++] 5  (0) 2024.08.23

+ Recent posts