내가 생각한 해결방법:
문제에서 색종이의 정확한 위치가 아니라 도화지와의 거리를 제시해준다. 거리의 차를 통해서 색종이끼리 겹치는 거리가 얼마인지 구한다음, (10x10)x3 = 300인 넓이에서 겹치는 만큼 빼주길 바라는거겠지? 직접 손으로 그리면서 풀어보자.
좀 더 자세하게는, strage라는 배열을 만들어서 각각의 도화지의 x,y값을 담은 배열을 넣어주겠다. 그리고 index에 따라 작은 x 큰 x, 작은 y 큰 y의 관계를 생각해 겹치는 색종이의 넓이를 구하겠다.
결론적으로는 위에 생각한 해결방법대로 하지 못했다.
2차원 배열 안에서 x, y값 전부를 왔다갔다 하며 크기를 비교해야 하기에 구현하는데에 어려움을 겪었다. 가능은 하겠지만 방법을 알아볼수록 이 문제에서 요구하는 방향과는 멀어짐을 느꼈다.
다른 해결방법이 도저히 떠오르지 않아 힌트를 좀 얻었다. 흰 도화지 자체를 0으로 채워진 이차원 배열이라 생각하라는 힌트였다.
n = int(input())
white_list = [[0 for _ in range(100)] for _ in range(100)]
for i in range(n):
x, y = map(int, input().split())
for j in range(x, x + 10):
for k in range(y, y + 10):
white_list[j][k] = 1
print(sum(sum(white_list, [])))
아이디어를 얻고 나니 구현하는 데에는 문제없었다. x,y 좌표를 얻고 가로 세로 길이가 10이니 10을 더해줘서 해당하는 요소에 1을 저장하고 더한값을 출력했다.
print(sum(sum(white_list, [])))
여기서 sum 함수의 사용법이 포인트다. sum(iterable, /)에서 /자리는 어떤 공간에 요소들을 하나로 이어붙일지 결정한다. 위에서는 []을 사용했다. 즉 이차원 배열의 모든 요소를 뽑아 일차원으로 묶었다. 이는 내가 자바스크립트에서 자주 사용했던 flat() 메소드와 같은 역할을 한다. 이차원 배열의 인덱스를 더 쉽게 조작하기위해 사용할 수 있다.
벌써 난항을 겪다니 역시 난 애송이다. 아직 갈 길이 멀다. 가자.