알고리즘 공부

[백준 2563번] 색종이 python

gyk7 2024. 8. 1. 01:41

 

1. 처음 아이디어를 생각해내는 게 어려웠다.

겹치는 부분들을 어떻게 계산해야 할 지 생각을 하고 있다가

넓이가 1이고 한 변의 길이가 1인 정사각형으로 쪼개는 아이디어를 생각해냈다.

이차원 배열로

graph = [[0]*101 for _ in range(101)]

그래프를 생성한 다음,

정사각형이 놓인 부분의 사각형들을 쪼개서 모두 넓이를 1로 두고,

정사각형이 두 개가 겹치든, 세 개가 겹치든 정사각형 안에 있는 부분이기 때문에 1에서 바뀌지 않게 지정해주었다.

(처음에는 두 개가 겹치면 2로, 세 개가 겹치는 부분이면 3으로 바꾸려고 생각했었는데 굳이 그럴필요가 없다는 걸 깨달았다...)

2. 처음에 아랫부분의 1의 개수를 구하는 코드를

for k in range(1, 100):
    for l in range(1, 100):
        if graph[k][l] != 0:
            area += 1
print(area)

이렇게 작성하여 런타임 에러(인덱스 에러)가 났다.

반복문을 너무 많이 사용해서 생긴 오류라고 보였다.

 

그래서 

for i in graph :
    area += i.count(1)
print(area)

이렇게 반복문을 한 번 쓰는 방식으로 바꿔주었더니 성공했다

 

[작성 코드]


n = int(input())
graph = [[0]*101 for _ in range(101)]
area = 0

for _ in range(n) :
    d1, d2 = map(int, input().split())
    for i in range(1, 11):
        for j in range(1, 11):
            graph[d1+i][d2+j] = 1

for i in graph :
    area += i.count(1)
print(area)