본문 바로가기
알고리즘 문제 풀이

[백준 22341] 사각형 면적

by 다빈치코딩 2024. 11. 25.

목차

    반응형

    사각형 면적(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