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