[2563] 백준 문제풀이 - 색종이

https://www.acmicpc.net/problem/2563

문제

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.

예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.

입력

첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다

출력

첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.

풀이

처음에는 수식을 넣어 풀어볼까 생각도 했지만 입력받는 값이 정해져있지않으므로 일일이 조건문을 넣어주자니 코드가 복잡해지고 풀기도 막막해보였다. 그래서 기하학적인 관점으로 접근해보았고 x, y가 모두 눈금이 1인 그래프이므로 그래프를 01로 나타내보면 0뿐인 도화지에 10x10으로 1을 채워넣는 그림이 보였다.

그래서 단순히 100x100의 도화지(0으로 이루어진)를 만들고 그 안에 1을 채워넣을 뿐인 단순한 코드를 짜보았다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
table = []
for i in range(100):
    temp = []
    for j in range(100):
        temp.append(0)
    table.append(temp)

N = int(input())
for _ in range(N):
    x, y = map(int, input().split(" "))
    for i in range(10):
        for j in range(10):
            table[i + x][j + y] = 1

sum = 0
for i in range(100):
    sum += table[i].count(1)

print(sum)

댓글남기기