문제
문제 : https://www.acmicpc.net/problem/2959
300년 동안 살면서 거의 모든 일을 다 해본 거북이는 이제 어떤 것에도 흥미를 느끼지 않는다. 이번 주말에 거북이는 시간을 때울 무언가로 거북이 세계에서 매우 유명한 '가장 큰 직사각형 만들기' 게임을 하려고 한다.
게임을 시작하기 위해선 양의 정수 네 개를 먼저 생각해야 한다. 한 방향으로 움직인 후에는 90도 회전하고 새로운 방향으로 움직여야 한다. 이렇게 세 번 회전하고 네 번 움직여 선분 네 개를 만든다.
선분을 그릴 때 움직일 걸음의 수가 바로 미리 생각해 둔 네 정수 중 하나이다. 한 정수는 한 번만 사용해야 한다. 정수를 사용하는 순서에 따라서 다양한 모양이 만들어지는데, 정사각형을 찾을 수 없을 수도 있다.
만들 수 있는 모양에서 가장 큰 직사각형을 계산하라.
예시
거북이가 생각한 숫자가 다음과 같다고 하자.
1 2 3 4
거북이가 다음과 같이 움직이면 면적이 3인 직사각형을 찾을 수 있다.
앞으로 네 걸음 -> 오른쪽으로 회전 -> 앞으로 한 걸음 -> 오른쪽으로 회전 -> 앞으로 세 걸음 -> 오른쪽으로 회전 -> 앞으로 두 걸음
예시의 경우, 결과는 3이 된다.
풀이
1. 가로/세로 정하기
먼저 네 가지의 서로 다른 숫자로 직사각형을 만들기 위해서는 가로와 세로가 될 숫자를 정해야 한다. 이 글의 경우에는 가장 큰 직사각형을 만들어야 하기 때문에 숫자를 정렬한 뒤, 그 순서대로 2개씩 가로, 세로로 정하면 된다.
예로 들어, 예시와 같이 입력이 1 2 3 4인 경우에는, 작은 수 2개인 1과 2가 세로가 되고 3과 4가 가로가 된다.
2. 사각형 크기 구하기
가로, 세로 두 개 숫자 중 사각형의 변의 길이가 되는 쪽은 작은 수에 해당한다. 즉 세로의 경우에는 1과 2 중에서 1이 변의 길이가 되고, 가로의 경우에는 3과 4 중에서 3인 변의 길이가 된다.
세로가 3이고 가로가 1인 직사각형의 크기는 3이 된다.
구현
위 풀이를 간단하게 구현하면 다음과 같다.
import sys
# 입력
v = list(map(int, sys.stdin.readline().split()))
# 정렬
v.sort()
# 직사각형 크기 계산
# 작은 두 개 수 중 작은 수 * 큰 두 개 수 중 작은 수
print(min(v[:2]) * min(v[2:]))
참고 문서
https://www.acmicpc.net/problem/2959
https://star7sss.tistory.com/379