백준 9063번 풀이

문제

옥구슬의 위치 좌표로 땅 넓이 계산하기(…)

풀이

근데 그거 본인 땅인거 증명해도 거기 불법점유 뭐 이런거 증명하고 하려면 김앤장정도는 섭외해야 하지 않나… 뭐 근데 솔직히 우리는 땅부자 걱정 할 처지가 아니니 걍 문제나 풉시다. 그 왜 좌표 입력받아서 마지막 점 찾는 그 문제 있죠? 3009번 문제. 이것도 비슷한 방식으로 풀면 된다.

참고로 이 문제를 보자마자 본인 표정:

아잇 이거 어렵자나…

근데 문제를 읽다 보니 풀이방법이 떠올라서 풀었음… 아무튼 이 풀이는 크게 투트랙인데, 1) 좌표를 입력받고 최댓값 최솟값 찾은 다음 2) 변 길이 구해서 면적 구한다. 이상이다.

import sys

coord_X = []
coord_Y = []

for i in range(4):
    pass

처음에는 이렇게 짰는데 문제를 다시 보니까 입력이 4개 고정이 아니다. 3개일수도 있고 1개일수도 있다.

import sys

T = int(sys.stdin.readline())
coord_X = []
coord_Y = []

for i in range(T):
    X, Y = map(int, sys.stdin.readline().split())
    coord_X.append(X)
    coord_Y.append(Y)

print(coord_X, coord_Y)

자 일단… 이 문제, 3009번 풀었던 방식 그대로 푼다고 했는데 3009번을 어떻게 풀었냐… XY 좌표를 받아서 X좌표 배열, Y좌표 배열에 하나씩 저장한다. 그리고 거기서 하나만 있는 놈을 뽑아서 출력하면 그게 마지막 좌표인거시야. 이것도 비슷한 방식인데, 옥구슬 좌표를 입력받아서 XY 좌표별 리스트에 일단 저장해준다.

coord_X_min = min(coord_X)
coord_X_max = max(coord_X)
coord_Y_min = min(coord_Y)
coord_Y_max = max(coord_Y)

print(coord_X_max, coord_X_min, coord_Y_max, coord_Y_min)

그 다음 좌표 배열에서 최대최소 뽑고

horizontal = coord_X_max - coord_X_min
vertical = coord_Y_max - coord_Y_min

가로세로 구해서 곱한거 출력하면 된다.

import sys

T = int(sys.stdin.readline())
coord_X = []
coord_Y = []

for i in range(T):
    X, Y = map(int, sys.stdin.readline().split())
    coord_X.append(X)
    coord_Y.append(Y)

coord_X_min = min(coord_X)
coord_X_max = max(coord_X)
coord_Y_min = min(coord_Y)
coord_Y_max = max(coord_Y)

horizontal = coord_X_max - coord_X_min
vertical = coord_Y_max - coord_Y_min

print(horizontal * vertical)

참 쉽죠? 예시에서 입력이 하나 있었던건 0이었는데 왜 그러냐면 배열 최대최소가 같은 값이라 빼면 0이그덩.