알고리즘 문제 풀이
5 / 16
백준 2563 색종이 with Python
알고리즘
- 구현
풀이 과정
종이를 표현하는 100x100 2차원 리스트를 생성해서 색종이를 채워넣는다. 종이의 원소는 모두 0으로 초기화한다.
색종이는 10x10 크기로 고정이고, 주어진 위치 정보는 '색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리', '색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리' 이므로 각 색종이의 시작 행과 시작 열을 다음과 같이 구한다.
시작 행: 종이의 크기(100) - '색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리' - 색종이의 크기(10)
시작 열: '색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리'
각 색종이마다 for문을 돌면서 종이를 1로 칠한다. 마지막에 종이에 있는 1의 개수를 세면 끝.
코드
import sys
input = sys.stdin.readline
n = int(input())
paper = [[0] * 100 for _ in range(100)] # 100 x 100 종이
color_papers = [list(map(int, input().split())) for _ in range(n)] # 색종이
for color_paper in color_papers:
# 색종이가 시작하는 row -> 종이의 크기 - 종이의 아래변과의 거리 - 색종이의 크기(10)
row = 100 - color_paper[1] - 10
# 색종이가 시작하는 col -> 종이의 왼변과의 거리
col = color_paper[0]
# 색종이의 넓이만큼 칠하기
for i in range(10):
for j in range(10):
paper[row + i][col + j] = 1
# 색종이의 총 넓이 구하기
res = 0
for i in range(100):
for j in range(100):
if paper[i][j] == 1:
res += 1
print(res)