fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 28015 (C++) 영역 색칠
최초 업로드: 2025-10-04 10:56:27
최근 수정 시간: 2025-10-04 10:56:27
게시자: rlatjwls3333
카테고리: 백준
조회수: 4
# [Silver II] 영역 색칠 [문제 링크](https://www.acmicpc.net/problem/28015) ## 문제 설명 <p>산지니는 빈 모눈종이의 격자 선을 따라 주어진 그림을 똑같이 따라 그리려고 한다. 그림은 두 가지 색으로 이루어져 있다.</p> <p>그림 도구인 붓은 가로 방향으로만 칠할 수 있으며, 붓의 두께는 1칸이다. 붓질 한 번에 칠할 수 있는 길이의 제한은 없고, 덧칠이 가능하다.</p> <p>산지니가 그림을 똑같이 그리는 데에 최소 몇 번의 붓질이 필요한지 구해보자.</p> ## 입력 <p>첫째 줄에는 그림의 세로 길이 $N$과 가로 길이 $M$이 공백으로 구분되어 주어진다. $(2\leq N,M\leq 100)$</p> <p>그다음 $N$줄에 걸쳐 $M$개의 정수가 공백으로 구분되어 주어진다. 각 정수는 그림 한 칸의 정보를 나타내며 '0'은 색이 칠해지지 않은 칸, '1'과 '2'는 각 색이 칠해진 칸을 의미한다.</p> ## 출력 <p>그림을 똑같이 그리는 데 필요한 붓질의 최소 횟수를 출력한다.</p> ## 풀이 먼저 나온 색으로 쭉 색칠한 후, 다른 색이 나오면 그 색으로 일부분을 덧칠하여 풀었습니다. ``` c++ #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; int cnt=0; while(n--) { int firstColor=-1, lastColor; for(int i=0;i<m;i++) { int color; cin >> color; if(color) { if(firstColor==-1) { cnt++; firstColor=color; } else if(firstColor!=color && lastColor!=color) { cnt++; } } else { firstColor=-1; } lastColor = color; } } cout << cnt; } ```