[Python][백준 2563] 색종이

Date:     Updated:

카테고리:

태그:

🎨 색종이 문제 풀이

백준 2563번 색종이 문제의 파이썬 풀이

📝 문제 설명

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

💡 풀이

이 문제는 2차원 배열을 사용하여 도화지를 표현하고, 색종이가 놓이는 영역을 1로 표시한 후 전체 1의 개수를 세는 방식으로 해결할 수 있다. 색종이가 겹치는 부분은 자동으로 처리된다.

🔍 코드 설명

  1. 100×100 크기의 2차원 배열을 생성하여 도화지를 표현한다.
  2. 색종이의 개수 N을 입력받는다.
  3. N개의 색종이에 대해:
    • 색종이의 왼쪽 아래 좌표 (x, y)를 입력받는다.
    • 해당 좌표부터 10×10 크기의 영역을 1로 표시한다.
  4. 전체 배열에서 1의 개수를 세어 출력한다.

✨ 참고

  • 리스트 컴프리헨션을 사용하여 2차원 배열을 초기화한다.
  • sum() 함수를 중첩하여 2차원 배열의 모든 원소의 합을 구할 수 있다.
  • 색종이가 겹치는 부분은 중복으로 계산되지 않는다.

🎯 주의사항

  • 좌표는 왼쪽 아래 모서리 기준이다.

🚀 다른 풀이 방법

집합(set)을 사용한 방법:

points = set()

n = int(input())

for _ in range(n):
    x, y = map(int, input().split())
    for i in range(x, x + 10):
        for j in range(y, y + 10):
            points.add((i, j))
print(len(points))

📝 코드

import sys

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

n = int(sys.stdin.readline())

for _ in range(n):
    x, y = map(int, sys.stdin.readline().split())
    for i in range(x, x + 10):
        for j in range(y, y + 10):
            drawing_paper[i][j] = 1

area = sum(sum(row) for row in drawing_paper)

print(area)

Python Coding Test 카테고리 내 다른 글 보러가기