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

 

이번에 볼 문제는 백준 26773번 문제인 Deski kontratakują이다.
문제는 아래 링크를 확인하자.

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

 

26773번: Deski kontratakują

W pierwszym wierszu wejścia znajduje się jedna liczba naturalna N (1 ≤ N ≤ 1 000 000), określająca liczbę desek posiadanych przez Bajtka. W drugim (ostatnim) wierszu wejścia znajduje się ciąg N liczb naturalnych L1, L2,. . . , LN (1 ≤ Li ≤

www.acmicpc.net

주어진 막대의 길이 중 가장 긴 네개의 막대의 길이를 긴 순으로 A, B, C, D라 하자. 이 값을 구하는 방법은 26769번 문제(링크)를 풀며 생각해보자. (이러한 방법을 쓰지 않고 단순히 정렬을 하더라도 괜찮을 것이다.)

 

이 때, 정사각형의 한 변의 길이의 최댓값을 이룰 수 있는 경우는 (A,B,C,D에서 한 토막씩 사용 / A에서 두 토막 B,C에서 한 토막씩 사용 / A에서 두 토막 B에서 두 토막씩 사용 / A에서 세토막 B에서 한 토막씩 사용 / A에서 네 토막 사용)의 다섯가지 중 하나임을 이용해 문제를 해결하자.

 

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

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

int N;
ll A, B, C, D;

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

	cin >> N;
	while (N--) {
		ll x; cin >> x;
		if (x > A) {
			D = C;
			C = B;
			B = A;
			A = x;
		}
		else if (x > B) {
			D = C;
			C = B;
			B = x;
		}
		else if (x > C) {
			D = C;
			C = x;
		}
		else if (x > D) {
			D = x;
		}
	}

	ll ans = max(D, max(max(A / 4, B / 2), max(min(A / 2, C), min(A / 3, B))));
	cout << ans * ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 26006 // C++] K-Queen  (0) 2022.12.26
[BOJ 15001 // C++] Frog Leaps  (0) 2022.12.26
[BOJ 9443 // C++] Arrangement of Contest  (0) 2022.12.26
[BOJ 17598 // C++] Animal King Election  (0) 2022.12.26
[BOJ 26645 // C++] 성장의 비약 선택권  (0) 2022.12.26

+ Recent posts