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