티스토리 뷰
반응형
🧾 백준 2563번 색종이 문제 풀이 정리
📌 문제 설명
도화지 위에 크기가 10x10인 정사각형 색종이를 여러 장 붙입니다.
색종이들이 서로 겹칠 수 있으며, 도화지의 크기는 100x100입니다.
색종이를 모두 붙인 뒤, 도화지에서 검은색으로 칠해진 영역의 넓이를 구하는 문제입니다.
💡 색종이 한 장이 덮는 면적은 항상 100(=10×10)입니다.
하지만 색종이들이 겹칠 경우는 겹친 부분은 한 번만 세어야 합니다!
📥 입력 형식
- 첫 줄에 색종이의 수
k(1 ≤ k ≤ 100)가 주어집니다. - 다음
k줄에는 각 색종이의 왼쪽 아래 모서리 좌표(N, M)이 주어집니다.0 ≤ N, M ≤ 90- 색종이는 도화지의 경계를 벗어나지 않습니다.
🎯 목표
색종이들을 도화지 위에 붙였을 때, 겹치는 부분을 제외하고 색종이가 덮는 총 면적(=검은 영역의 넓이)을 구합니다.
💡 아이디어
✅ 1. 도화지 모델링
- 도화지를 100x100 크기의 2차원 배열로 생각합니다.
- 각 칸은 0 또는 1로 표시:
0: 아직 색종이가 붙지 않은 칸1: 색종이가 붙은 칸
✅ 2. 색종이 붙이기
- 각 색종이는 10x10 크기이므로, 입력으로 받은
(N, M)좌표를 시작점으로 하여 - 세로
j는N부터N+10, 가로i는M부터M+10 - 해당 범위에 해당하는
arr[j][i]를 1로 바꿉니다.
✅ 3. 넓이 계산
- 2차원 배열
arr를 전체 순회하면서 1로 되어 있는 칸의 개수를 모두 더하면, 겹침을 고려한 전체 넓이를 알 수 있습니다.
🧑💻 코드 설명
# 색종이 수 입력
k = int(input())
# 100x100 도화지 초기화 (모두 0으로)
arr = [[0 for _ in range(100)] for _ in range(100)]
# 색종이 정보 입력 및 도화지에 반영
for _ in range(k):
N, M = map(int, input().split())
for j in range(N, N + 10): # 세로 방향 (행)
for i in range(M, M + 10): # 가로 방향 (열)
arr[j][i] = 1 # 색종이 붙이기
# 색종이로 덮인 면적 계산
sum = 0
for i in range(100):
for j in range(100):
if arr[i][j] == 1:
sum += 1
print(sum) # 결과 출력
🔍 예제 입력/출력
✅ 입력
3
3 7
15 7
5 2
✅ 출력
260
🧠 설명
- 각각의 색종이는 100칸을 덮지만, 서로 겹칠 수 있습니다.
- 실제로 이 예제에서는 3개의 색종이가 일부 겹치기 때문에 300보다 작은
260이 나옵니다.
🎓 쉬운 비유
도화지를 가로세로 1cm짜리 정사각형 타일로 만든 바닥이라고 생각해보세요.
색종이는 10cm x 10cm 매트입니다.
여러 개의 매트를 바닥에 올려두고, 위에서 보았을 때 매트가 깔린 전체 면적을 계산하는 것과 같습니다.
겹쳐서 깔린 부분은 중복 계산하면 안 됩니다!
✅ 마무리 정리
| 항목 | 내용 |
|---|---|
| 핵심 아이디어 | 2차원 배열로 도화지를 모델링하여 색종이가 붙은 칸을 체크 |
| 시간 복잡도 | O(k × 100) → k는 최대 100개, 각 색종이 10x10 반복 |
| 공간 복잡도 | O(100×100) = 10,000 |
✍️ 결론
이 문제는 이차원 배열을 다루는 기초 문제로,
좌표를 기반으로 면적을 처리하는 사고 훈련에 좋습니다.
색종이를 일일이 붙이면서 겹침을 고려하고,
그 결과를 배열로 계산한다는 점에서 시뮬레이션 기법의 대표 예시라고 볼 수 있습니다.
✔️ 비슷한 문제를 더 연습하고 싶다면, 좌표 기반 시뮬레이션 문제를 검색해서 풀어보는 걸 추천합니다!
반응형
'백준 스터디' 카테고리의 다른 글
| 🎬 [백준 1436] 영화감독 숌 - "666"이 들어간 n번째 수 찾기 (Python 구현) (1) | 2025.06.02 |
|---|---|
| 백준 1436번 영화감독 숌, C++ (0) | 2025.06.01 |
| 색종이 넓이 계산 백준 2563, C++ (0) | 2025.06.01 |
| 🧩 백준 1018번 - 체스판 다시 칠하기. 파이썬 (0) | 2025.05.30 |
| 백준 1018 체스판 다시 칠하기 C++ (1) | 2025.05.30 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 프로그래머스
- 코딩테스트
- 알고리즘
- 코딩
- C++
- DP
- 파이썬
- 백준
- 알고리즘 문제풀이
- 상속
- 문제 풀이
- 프로그래밍
- c언어
- 코딩 테스트
- 문제풀이
- 문자열처리
- 동적 계획법
- 그리디
- 그래프 탐색
- 동적계획법
- HTML
- 브루트포스
- 파이썬코딩
- 알고리즘기초
- dfs
- 그리디알고리즘
- python 알고리즘
- 객체지향
- Python
- 알고리즘문제풀이
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
글 보관함
반응형