[ BOJ / C++ ] 2563번 색종이

황승환·2021년 8월 11일
0

C++

목록 보기
34/65

이번 문제는 특별한 알고리즘 구현 없이 해결할 수 있는 문제였다. 본인은 처음에 전체 넓이를 더한 뒤에 겹치는 부분을 빼야한다고 생각했다. 그러다가 문득 색종이가 올라간 부분만 표시를 해주면 된다는 생각을 하게 되었고 그 방법으로 간단하게 해결할 수 있었다.

  • 흰색 도화지를 bool형으로 선언한다.
  • 색종이에 대한 정보가 주어지면 흰색 도화지 위의 색종이 범위를 모두 true로 바꿔준다.
  • 이 과정을 색종이 수만큼 반복한다.

Code

#include <iostream>
#include <vector>
#define MAX 101
using namespace std;

bool total[MAX][MAX];
int n;
pair<int, int> paper[MAX];
int result=0;

void Input(){
    cin>>n;
    for(int i=0; i<n; i++){
        cin>>paper[i].first>>paper[i].second;
    }
}

int Solution(){
    for(int i=0; i<n; i++){
        for(int j=paper[i].second; j<paper[i].second+10; j++){
            for(int k=paper[i].first; k<paper[i].first+10; k++){
                total[j][k]=true;
            }
        }
    }
    for(int i=0; i<MAX; i++){
        for(int j=0; j<MAX; j++){
            if(total[i][j])
                result++;
        }
    }
    return result;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    Input();
    cout<<Solution()<<endl;
    return 0;
}

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글