목차
사각형 면적(22341)
문제 출처 : https://www.acmicpc.net/problem/22341
이 문제는 2021년 정보올림피아드 2차 대회 초등부 1번 문제 입니다.
종이에 점이 주어졌을 때 가로나 세로로 잘라 더 큰 면적을 남겨나가며 최종적으로 얻게 되는 면적을 구하는 문제 입니다. 규칙에 맞게만 수행한다면 어려운 점 없이 문제를 해결할 수 있습니다. 간단한 문제이기 때문에 코드를 작성해 나가며 문제를 해결해 보겠습니다.
코드 작성
코드를 작성해보겠습니다.
입력 받기
N, C = map(int, input().split())
A, B = N, N
for _ in range(C):
X, Y = map(int, input().split())
A, B = get_area(A, B, X, Y)
print(A * B)
초기 종이의 가로, 세로의 크기 N과 좌표의 개수 C를 입력 받습니다. 다음으로 C개의 X, Y의 좌표를 입력 받습니다. 초기 종이의 크기 가로 세로는 N 입니다.
종이의 가로, 세로의 길이 A, B와 종이를 자를 좌표 X, Y를 인자로 하는 함수 get_area를 만들어 주었습니다. 이 함수를 이용하면 잘려진 종이의 가로, 세로를 다시 A, B로 리턴 받습니다. C개의 자르기 연산이 끝나면 마지막 A, B 값으로 종이의 크기 A * B를 출력 하면 됩니다.
종이의 크기 리턴 함수 구현
def get_area(a, b, x, y):
if a <= x or b <= y:
return a, b
if x * b < a * y:
return a, y
else:
return x, b
종이의 크기를 구하는 함수 입니다. 첫 번째 조건문은 종이의 크기를 벗어난 좌표를 무시하는 것입니다. 문제에서 명시되어 있는 부분입니다. 범위가 경계를 포함한다는 것에 유의해야 합니다.
다음으로 가로 세로를 잘라 얻은 면적을 비교합니다. 더 큰 면적의 좌표 값을 리턴합니다. 이 때 크기가 같다면 가로로 자른 것을 리턴해야 합니다. x 값 기준으로 자른 것이 가로로 자른 것 입니다. 가로로 자른 x, b 인 부분이 리턴됩니다. 리턴 받은 좌표는 새로운 A, B 값이 되어 다음 계산을 이어 가게 됩니다.
전체 코드
전체 코드를 확인해 보겠습니다.
def get_area(a, b, x, y):
if a <= x or b <= y:
return a, b
if x * b < a * y:
return a, y
else:
return x, b
N, C = map(int, input().split())
A, B = N, N
for _ in range(C):
X, Y = map(int, input().split())
A, B = get_area(A, B, X, Y)
print(A * B)
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준 24552] 올바른 괄호 (2) | 2024.11.27 |
---|---|
[백준 2504] 괄호의 값 (0) | 2024.11.26 |
[백준 9012] 괄호 (0) | 2024.11.24 |
[백준 18222] 투에-모스 문자열 (0) | 2024.11.23 |
[백준 20188] 등산 마니아 (1) | 2024.11.22 |