알고리즘 문제 풀이

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)