본문 바로가기
  • < / >
Algorithm/Beakjoon

[백준] 2563_색종이 (C++)

by JunMango 2023. 5. 14.

 

색종이

 

문제

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.

예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.

입력 출력
3 7
15 7
5 2
260

문제 해석

이 문제는 2차원 배열의 문제로 전체 100,100인 도화지를 2차원 배열로 선언후 

1단위로 잘게 쪼개서 색종이가 있는 부분을 1로 만들어 1을 세어 넓이를 구하는 방식으로 접근하는 하였다.

****겹친 부분을 빼거나 할 필요 없이 전체 도화지의 1만 세는 것이다.****

 

C++

#include <iostream>

using namespace std;

int main() {
    int square[100][100];
    int width[100][100] = {0,}; // 색종이
    int n; //색종이의 개수
    int cnt=0; //총 넓이
    int a;
    int b;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a >> b;
        for (int j = a; j < a + 10; j++) {
            for (int k = b; k < b + 10; k++) {
                width[j][k] ={1};
            }
        }
    }
    for(int i = 0; i<100;i++){
        for(int j=0; j<100; j++){
            if(width[i][j]!=0){
                cnt ++;
            }
        }
    }
    cout << cnt <<endl;
}


코드해석

  • 전체 도화지를 만든다 => int square[100][100] ={0, } //{0, } 으로 선언할경우 이차원 배열을 0으로 선언 가능하다.
  • 색종이의 개수를 입력한다.
  • 색종이가 있는 부분들을  1 로 만든다.
  • 전체 도화지에서 1로 되어 있는 부분들을 for 문으로 센다.

'Algorithm > Beakjoon' 카테고리의 다른 글

[백준] 2745 진법 변환 (C++)  (0) 2023.05.15
[백준] 10798 (C++)  (0) 2023.05.13
[백준] 2908 (python)  (0) 2022.11.09
[백준] 1152 (python)  (0) 2022.10.24
[백준] 1157 (python)  (0) 2022.10.23

댓글