[Python][백준 2563] 색종이
카테고리: Python Coding Test
🎨 색종이 문제 풀이
백준 2563번 색종이 문제의 파이썬 풀이
📝 문제 설명
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.
💡 풀이
이 문제는 2차원 배열을 사용하여 도화지를 표현하고, 색종이가 놓이는 영역을 1로 표시한 후 전체 1의 개수를 세는 방식으로 해결할 수 있다. 색종이가 겹치는 부분은 자동으로 처리된다.
🔍 코드 설명
- 100×100 크기의 2차원 배열을 생성하여 도화지를 표현한다.
- 색종이의 개수 N을 입력받는다.
- N개의 색종이에 대해:
- 색종이의 왼쪽 아래 좌표 (x, y)를 입력받는다.
- 해당 좌표부터 10×10 크기의 영역을 1로 표시한다.
- 전체 배열에서 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)