[알고리즘] 백준 9036 대지 - C

POBSIZ (POBSIZ)·2023년 5월 27일
0

알고리즘

목록 보기
11/11
post-custom-banner

문제 바로가기 >

설명 & 입출력

해설

이 문제는 n개의 좌표가 주어지고 해당 좌표들로 직사각형을 만들고 해당 직사각형의 넓이를 출려하면 되는 문제이다.

조건

  • 만들어진 직사각형은 주어진 좌표를 모두 포함하고 있어야 한다.
  • 주어진 좌표를 둘러싸는 최소 크기의 직사각형을 만들어야 한다.

위 조건을 만족하기 위해선 주어진 좌표들을 이용하여 만들어야 할 직사각형의 x, y의 최소값과 최대값을 구하면 된다.

코드

#include <stdio.h>

int main() {
	// n = 점의 개수, x & y = 입력받는 좌표값
    // ix & iy = 입력받은 좌표들 중 x와 y의 최소값
    // ox & oy = 입력받은 좌표들 중 x와 y의 최대값
    int n, x, y, ix, iy, ox, oy;
    
    // 점의 개수를 입력받는다.
    scanf("%d", &n);
    
    // 첫번째 점의 좌표를 입력받고 x,y의 최소값에 저장한다.
    scanf("%d %d", &ix, &iy);
    
    // x,y의 최대값에도 첫번째점의 좌표값을 넣는다.
    ox=ix;
    oy=iy;
    
    // 처음 입력받은 점을 제외한 점의 개수만큼 반복
    for(int i=0; i<n-1; i++) {
    	// 좌표를 이어서 받는다.
        scanf("%d %d", &x, &y);
        
        // 기존 x,y의 최소값보다 입력받은 좌표가 작다면 최소값을 변경
        if(x < ix) ix=x;
        if(y < iy) iy=y;
        
        // 기존 x,y의 최대값보다 입력받은 좌표가 작다면 최대값을 변경
        if(x > ox) ox=x;
        if(y > oy) oy=y;
    }
    
    // 최대값과 최소값을 빼서 x면과 y면의 길이를 곱해 넓이를 출력
    printf("%d", (ox-ix) * (oy-iy));
    
    return 0;
}

마무리

이번 문제의 경우 좌표에 대한 이해만 있다면 쉽게 풀수 있을것이다.

post-custom-banner

0개의 댓글