본문 바로가기
Backjoon

Backjoon - problem 2563 색종이 파이썬

by ddahu 2023. 4. 27.

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

 

2563번: 색종이

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록

www.acmicpc.net

 

 

 

  • 입력 & 출력

 

  • 풀이 

 

num = int(input())
papers = [list(map(int, input().split())) for _ in range(num)]

board = [[0] * 100 for _ in range(100)]

for paper in papers:
    for i in range(paper[0], paper[0] + 10):
        for j in range(paper[1], paper[1] + 10):
            board[i][j] = 1

area = 0
for i in range(100):
    area += sum(board[i])

print(area)

 

  • 해설

색종이 문제는 지정해준 100*100 이라는 2차원배열의 좌표값을 통해 색종이를 붙이고 안붙이고를 따져서 넓이를 구하는 문제이다.

 

나 같은경우에는 딱 처음 이문제를 봤을땐 간단하게 색종이를 붙일때마다 겹치는 부분의 개수만 count 해서 계산 하면 될거같았지만 당연히...첫 코딩은 완전히 잘못 풀었었다..

 

다시 이문제를 생각 해보았을때 DFS 처럼 순회를 하면서 색칠된 색종이 좌표를 1로 채우고 찾은 1들의 개수를 구하는 식으로 하였더니 정답이 나왔다.

 

 

구체적인 해설

 

입력할 좌표값 색종이를 100*100으로 

board = [[0] * 100 for _ in range(100)] 초기화를 해준다

 

색종이의 수 만큼 순회를 하면서 색종이를 붙이는데 for문에 색종이의 좌표값으로 board에 1을 채워준다

 

그 이후 모두 순회를 하면 각 행의 1을 모두 더해 색종이의 넓이를 구한다.