티스토리 뷰
2477번: 참외밭
첫 번째 줄에 1m2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지
www.acmicpc.net
1. 문제 내용
2. 접근 방식
- 육각형을 두 덩어리로 쪼개 각각 넓이를 구하자.
1번째와 2번째로 입력받은 사격형의 넓이와 4번째와 5번째로 입력받은 사각형 넓이를 각각 구한다. 그러면 처음에 입력받기 시작하는 임의의 꼭짓점 위치에 따라서 위 그림처럼 2가지 방법으로 육각형이 쪼개진다.
- 각 덩어리의 넓이를 더할 때와 뺄 때를 구분하기 위해 가장 긴 가로와 세로을 가진 사각형의 넓이를 구하자.
위 그림에서 1번째 케이스는 두 사각형을 합해야 하지만, 2번째 케이스는 초록색 사각형에서 주황색 사각형 넓이를 빼야 한다. 만약 초록색과 주황색 두 덩어리의 합이 전체 사각형(두 번째 케이스의 초록색 사각형) 크기보다 작다면 1번째 케이스이고, 크거나 같다면 2번째 케이스이다.
그럼 가장 큰 사각형의 가로와 세로는 어떻게 구할까? 이는 간단하다. 위 그림은 각 변의 방향을 나타낸 그림이다. 그림에서 확인할 수 있듯이 가장 긴 가로와 세로는 각 변의 방향을 입력 받을 때 딱 한 번씩만 입력받으므로, 방향이 중복되지 않는 것을 찾으면 된다.
3. 정답 코드
def input_data():
n = int(input())
tmp = []
tmp2 = [[] for _ in range(4)]
for _ in range(6):
d, length = map(int, input().split())
tmp.append(length)
tmp2[d - 1].append(length)
return n, tmp, tmp2
def get_maxArea():
size = 1
for x in data2:
if len(x) == 1:
size *= x[0]
return size
k, data, data2 = input_data()
maxArea = get_maxArea()
mass = []
for i in range(0, 6, 3):
mass.append(data[i] * data[i+1])
area = sum(mass) if sum(mass) < maxArea else max(mass) - min(mass)
print(area * k)
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] 1431번 시리얼 번호 파이썬 정답 코드 (0) | 2023.06.21 |
---|---|
[백준] 17413번 단어 뒤집기 2 파이썬 정답 코드 (0) | 2023.06.13 |
[백준] 2108번 통계학 파이썬 정답 코드 (0) | 2023.06.10 |
[백준] 1966번 프린터 큐 파이썬 정답 코드 (0) | 2023.06.10 |
[백준] 1213번 팰린드롬 만들기 파이썬 정답 코드 (3) | 2023.06.09 |