본문 바로가기

알고리즘/백준

백준1455-뒤집기II(브론즈1)

문제출처 : https://www.acmicpc.net/problem/1455

 

1455번: 뒤집기 II

세준이는 동전 뒤집기를 하려고 한다. 세준이는 동전을 N*M개 가지고 있다. 동전은 세로로 N개, 가로로 M개 크기의 직사각형에 차곡차곡 놓여져 있다. 동전의 앞면을 0이라고 하고 뒷면을 1이라고

www.acmicpc.net

문제풀이) (a,b)를 뒤집는데 (0,0)부터 (a,b) 까지 뒤집어야 되므로 끝에서 부터 만약 1을 만나면 모두 뒤집어 보면 된다.

 

#include <iostream>
#include <cstdio>

using namespace std;

int coin[110][110];

void Reverse(int y,int x)
{

    for(int i=0;i<=y;i++)
    {
        for(int j=0;j<=x;j++)
        {
            coin[i][j]=1-coin[i][j]; ///0,0 부터 y,x  위치까지 뒤집어 주자.
        }
    }
}

int main()
{
    int n,m;
    cin >> n >> m;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            scanf("%1d",&coin[i][j]);
        }
    }
    int cnt=0;
    for(int i=n-1;i>=0;i--)
    {
        for(int j= m-1;j>=0;j--)
        {
            if(coin[i][j]==1)
            {
                cnt++;
                Reverse(i,j);
            }
        }
    }
    cout << cnt;
    return 0;
}