Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

blog

(백준) 2563: 색종이 본문

백준

(백준) 2563: 색종이

채희태 2023. 4. 10. 22:30

문제

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

 

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

입력

첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다

출력

첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.

 

 

#include <stdio.h>

int main() {
    int a[100][100]={0, };
  int n, b, c, sum=0;
  scanf("%d", &n);

  for(int i=0; i<n; i++){
    scanf("%d %d", &b, &c);
      
  for(int k=0; k<100; k++){
    for(int j=0; j<100; j++){
      if(a[b][c] == a[k][j]){
        for(int l=0; l<10; l++){
          for(int m=0; m<10; m++){
            a[b+l][c+m]=1;
          }
        }
        
        }
      }
    }
  }
  for(int i=0; i<100; i++){
    for(int j=0; j<100; j++){
      if(a[i][j]==0){
        sum++;
      }
    }
  }
  printf("%d", 10000-sum);
  
    




  
    return 0;
}

내가 푼 문제의 흐름: 색종이의 위치를 입력받은 후 색종이가 가리고 있는 부분은 2차원 배열을 써서 1로 바꾸고 아닌 부분은 배열을 0으로 초기화 시켰기 때문에 0이다.  그중에 1의 개수를 출력한다.

 

 

1.  색종이의 수를 입력 받고 색종이의 수 만큼 색종이를 붙일 위치를 입력받는다.

2.  첫번째 for문은 색종이의 수만큼 색종이의 붙일 위치를 입력받는다.

3. 두번째, 세번째 for문은 a[100][100]만큼 입력 받을수 있으니까 k, j를 각각 100번씩 반복한다 그러다 k, j가 입력받은 색종이의 위치 b,c 와 같으면 넓이가 100인 정사각형모향의 색종이를 덮는다.

4. 넓이가 100인 정사각형 모향의 색종이를 덮는 것을 l, m을 각각 10번씩 총 100번 반복해서 각각의 해당하는 a[b+l][c+m]의 배열의 위치에 1을 지정해 두었다.

5. 마지막으로 1의 개수를 출력하기 위해서 이중 for문을 사용해서 a[i][j]가 0일때 sum에 1씩 더해주고 총 배열의 개수인 10000에서 sum을 빼주면 붙인 색종이의 영역이 나온다.

 

실수: 마지막에 if (a[i][j]==1)일 때는 sum++를 해서 바로 붙인 색종이의 영역을 출력할수 있었는데 좀 돌아서 풀이했다.

'백준' 카테고리의 다른 글

(백준) 직사각형에서 탈출-1085  (0) 2023.04.18
(백준) 링-3036  (0) 2023.04.18
(백준) 2444-별찍기  (0) 2023.04.09
(백준) 3003-킹, 퀸, 룩, 비숍, 나이트, 폰  (0) 2023.04.09
(백준) 11720-숫자의 합  (0) 2023.04.09