jyamethyst21 님의 블로그

백준 9063번 - 대지 (PYTHON 풀이) 본문

CODING 💻

백준 9063번 - 대지 (PYTHON 풀이)

jyamethyst21 2025. 9. 13. 15:44

문제:

 

문제가 길다. 가장 긴 문제라 오래 걸릴 거 같아 해당 파트에서 가장 마지막으로 푼건데, 자세히 읽어보니 긴 문장에서 필요한 부분은 딱히 없다. 그냥 저 좌표랑 그 밑 설명만 참고하면 금방 풀 수 있다.

사용자로부터 입력값을 받아서 이를 좌표형태로 찍은 후 직사각형 형태로 만들어서 해당 넓이를 구하면 되는데 이 문제 역시 규칙성이 있다.

눈치 빠른 사람은 방법을 알아차렸겠지만, 문제에 이미 답이 있다. 좌표를 다 받아서 x좌표에서 (큰 값-작은 값), y좌표에서 (큰 값-작은 값)을 한 다음 두 값을 곱하면 바로 넓이를 구할 수 있다.

 

풀이:

a=int(input())
k=[]
even=[]
old=[]

for i in range(a):
    n,m=map(int,input().split())
    k.append(n)
    k.append(m)
for j in range(len(k)):
    if j % 2 == 0:
        even.append(k[j])
    else:
        old.append(k[j])
print((max(even)-min(even)) * (max(old)-min(old)))

코드는 다음과 같다. 좀 길긴 하지만 직관적으로 작성하였다.

몇번 좌표를 받을지 입력한 뒤, 해당 수만큼 반복문을 돈다. 

그 후 x, y 좌표 순서대로 k 리스트에 추가한 뒤에 짝수번째에 있는 값을 even 리스트, 홀수번째에 있는 값을 old 리스트에 추가한다.

이 과정을 거치면 x좌표는 x좌표끼리 모아질 것이고, y좌표는 y좌표끼리 모아질 것이다.

모아진 리스트에서 max, min 값을 구해서 빼고 각각의 가로와 세로를 곱하면 직사각형의 넓이는 쉽게 구할 수 있다!

.

.

.

지금까지 코딩하면서 느낀 점은.. 코드 작성할 때 최대한 길게 풀어서 쓰는 걸 선호하는 편이라 길더라도 차근차근 작성하는데, 이는 메모리면이나 시간면에서 좋지 않아서 간단하게 써야할 것 같다는 생각이 들었다.

이로써 기하 1: 직사각형과 삼각형파트는 전부 풀었고, 다음 파트도 열심히 풀어야겠다!