Algorithm/백준

[백준] 2959 - 거북이

비번변경 2025. 1. 9. 22:01

문제

문제 : 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