본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬]2563번 색종이

by 현장 2021. 8. 31.

-코드

n = int(input())
arr = [[0 for _ in range(101)] for _ in range(101)]
c = 0
for _ in range(n):
    x, y = map(int, input().split())
    for i in range(x, x + 10):
        for j in range(y, y + 10):
            arr[i][j] = 1
for i in arr:
    c += sum(i)
print(c)

처음에는 리스트를 사용하지 않고 최대 값인 100 * n에서 겹치는 부분을 빼려고 하니 겹치는 부분을 구하는 것이 함 들어서 포기를 하고 풀기 위해서 해결방법을 찾아보니 그냥 2차원 리스트를 만들어서 그래프처럼 활용하여 주어진 값에 대한 부분을 다 1로 만들면 겹치는 부분도 어차피 1이 되어 추가적인 변경 없이 다 더하면 값이 나오게 된다는 것을 알게 된 후 리스트를 처음에 [[0] * 101] * 101로 했으나 이렇게 하면 정해진 배열과 별개로 해당하지 않는 부분도 1로 바뀌게 되어서 다시 해결방법을 찾아보니 for문으로 하면 해결이 되었고 출력도 sum(arr)로 해서 출력하려 했으나 0이나 와서 이유를 찾아보니 2차원 배열이라 배열 1개씩 해줘야 한다는 것을 알게 되었습니다.