백준 문제풀이

[백준 문제 나의 풀이] 2563번 색종이

찹쌀동수육 2021. 6. 28. 00:05

https://www.acmicpc.net/problem/2563

 

2563번: 색종이

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록

www.acmicpc.net

[나의 생각]

가로, 세로 100의 크기를 가진 정사각형 모양의 도화지를 보고 X와 Y 값을 가지는 2차원 좌표평면에 그리는 생각했다.

 

검은색 색종이 역시 가로, 세로 10의 크기를 가진 정사각형 모양이므로 좌표평면에 올려둘 수 있다고 생각했다.

 

그리하여 좌표평면 X와 Y는 0에서 시작하여 100까지를 표현함으로 도화지를 그리고 주어지는 값에 따라 검정색 색종이를 조절하여 표현할 수 있다고 생각했다.

 

그러면 좌표평면에 검정색 색종이가 포함된 부분의 넓이를 구할 수 있을 것으로 생각하고 구현을 시작했다.

 

[구현]

좌표평면에 그리기 위해서 그래프에 관련된 함수를 사용해야한다고 고민하다가 크기가 어떠한 단위를 주어지지 않을 것을 보고 2차원 배열 100 X 100 칸을 구현하면 그것이 도화지가 될 것이라고 생각하여 구현하였다.

( 배열은 0으로 초기화 )

 

검정색 색종이는 가로, 세로 10의 크기를 가지므로 좌측 아래 꼭짓점의 좌표를 알게되면 색종이를 표현할 수 있다고 생각하여 입력받은 도화지의 왼쪽 변 사이의 거리, 오른쪽 변 사이의 거리를 이용하여 시작점으로 생각하고 구현했다.

 

결국 1개의 색종이는 2개의 정보를 입력받는다. ( X 좌표 시작점, Y 좌표 시작점 )

2차원 배열의 [행 + i][열 + i]로 하여 10칸만큼 움직이면서 2차원 배열을 1로 업데이트 해준다.

 

막으로 2차원 배열을 모두 한칸씩 읽어가며 1의 개수를 출력해준다.

#include <stdio.h>

int main(void){
    int dohwaji[100][100] = { 0, };//도화지 2차원 배열
    int num = 0;//색종이 갯수
    int x_num = 0;//색종이의 x좌표 시작점
    int y_num = 0;//색종이의 y좌표 시작점
    int area = 0;
    
    scanf("%d", &num);//색종이 갯수를 입력받는다.
    for(int i = 0 ; i < num ; i++){
        scanf("%d", &x_num);
        scanf("%d", &y_num);
        for(int k = 0 ; k < 10 ; k++){
            for(int j =0 ; j < 10 ; j++){
                dohwaji[x_num + k][y_num + j] = 1;
            }
        }
    }
    
    for(int i = 0 ; i < 100 ; i++){
        for(int k = 0 ; k < 100 ; k++){
            if(dohwaji[i][k] == 1){
                area++;
            }
        }
    }
    printf("%d", area);
}

 

'백준 문제풀이' 카테고리의 다른 글

[백준 문제 나의 풀이] 4673번 셀프 넘버  (0) 2021.11.08