백준 9063번 바로가기

나의 풀이

x = []
y = []

for _ in range(int(input())):
  n, m = map(int, input().split())
  x.append(n)
  y.append(m)

print((max(x)-min(x)) * (max(y)-min(y)))

고수의 풀이

*l,=map(int,open(0).read().split())
s=lambda i:max(i)-min(i)
print(s(l[1::2])*s(l[2::2]))

출처

CODE REVIEW

  1. 예외를 따질 필요 없이, x값중 최대에서 최소를 빼고, y도 마찬가지로 빼서 서로 곱하면 되는 간단한 문제였다.
  2. x와 y 각각에 대해 list을 만들어서 해결했는데, 메모리를 더 줄이기 위해서는 하나의 리스트로도 해결 가능하다.
    • 고수의 풀이를 보면 3번째 줄에 l[1::2] l[2::2]와 같은 표현을 볼 수 있는데 input을 int로 계속 불러와서 list에 저장하게 되면 x값은 1번 index부터 2간격으로, y값은 2번 index부터 2간격으로 등장한다.
  3. lambda을 애용하자. s=lambda i:max(i)-min(i)로 지정하면 여러번 반복해서 작성할 필요 없이 함수처럼 불러올 수 있다.