색종이
문제
가로, 세로의 크기가 각각 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 |
댓글