지우너
[코드트리] 0과 1로 이루어진 격자 C++ 본문
문제



코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
문제 쪼개기
주어지는 것
정수 N
숫자 0과 1로만 이루어진 N * N 크기의 격자
목표
모든 칸을 0으로 만들려고 할 때, 칸을 누르는 횟수를 최소화
조건
특정 칸을 누르면 그 칸을 기점으로 좌측 상단 모든 영역을 반전(0→1, 1→0)
마지막 칸부터 반전시키면 해당 칸에 영향을 줄 수 있는 곳이 해당 칸 밖에 없으므로 최소 횟수가 될 것 같다(아래 그림 참고)

코드

#include <iostream>
using namespace std;
const int MAX_N =11;
int n;
string arr[MAX_N];
void Reversing(int x, int y){
for(int i=0; i<=x; ++i){
for(int j=0; j<=y; ++j){
if(arr[i][j]=='1') arr[i][j]='0';
else arr[i][j]='1';
}
}
}
int main() {
cin >> n;
for(int i=0; i<n; ++i){
cin >> arr[i];
}
// 모든 칸을 0으로 만들려고 할 때, 칸을 누르는 횟수를 최소화하는 프로그램을 작성
int answer=0;
for(int i=n-1; i>=0; --i){
for(int j=n-1; j>=0; --j){
if(arr[i][j]=='1'){
Reversing(i, j);
answer++;
}
}
}
cout << answer << '\n';
return 0;
}
'Problem Solving' 카테고리의 다른 글
[코드트리] 각 정점까지의 최단 경로3 C++ (0) | 2024.09.14 |
---|---|
[코드트리] G&H 반전시키기3 C++ (0) | 2024.09.13 |
[코드트리] 상하좌우 반전시키기 C++ (0) | 2024.09.11 |
[코드트리] 좌우 반전시키기 C++ (0) | 2024.09.10 |
[코드트리] G&H 반전시키기 C++ (0) | 2024.09.10 |