[백준 2959] 거북이 (C++, C#) - soo:bak
작성일 :
문제 링크
설명
거북이가 네 방향으로 움직여 만든 도형에서 가장 큰 직사각형의 면적을 구하는 문제입니다.
총 네 번의 직선 이동이 주어지며, 각 이동 거리는 서로 다른 네 개의 양의 정수로 구성되어 있습니다.
따라서, 이 중 두 개씩 짝지어 직사각형을 만들 수 있다면 해당 직사각형의 면적을 계산할 수 있습니다.
최대한 큰 직사각형을 만들기 위해서는
서로 같은 길이를 가진 두 쌍을 선택하여 가로와 세로를 구성하는 것이 가장 적절합니다.
접근법
주어진 네 개의 수를 정렬한 뒤,
가장 인접한 쌍을 선택해 두 수의 곱으로 면적을 계산합니다.
- 정렬을 진행하면 가장 작은 두 수와 가장 큰 두 수가 이웃하게 배치되므로,
- 가능한 사각형 중 가장 큰 정사각형 또는 직사각형을 쉽게 구할 수 있습니다.
즉, 정렬한 배열의 0
번째 수와 2
번째 수를 곱하면
가장 큰 직사각형을 만들 수 있는 조합이 됩니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
using System;
using System.Linq;
class Program {
static void Main() {
var nums = Console.ReadLine().Split().Select(int.Parse).ToList();
nums.Sort();
Console.WriteLine(nums[0] * nums[2]);
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
vi n(4);
for (int &x : n)
cin >> x;
sort(n.begin(), n.end());
cout << n[0] * n[2] << "\n";
return 0;
}