알고리즘/백준저지

백준저지 2563번 색종이

anott 2021. 8. 10. 22:57

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

 

2563번: 색종이

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

www.acmicpc.net

 

제출 날짜: 2021년 8월 10일 화요일

 

 

 

생각

아래 두 질문글에 대한 답변을 보고 풀이법을 생각해낼 수 있었다.

https://www.acmicpc.net/board/view/29006

https://www.acmicpc.net/board/view/32209

그런데 문제를 풀다가 Arrays.fill()이 이차원 배열에는 적용이 안 된다는 것을 알게 되었다. for문을 사용해야 하나 싶었는데 아래 글에서 훨씬 나은 해결방법을 찾을 수 있었다.

https://stackoverflow.com/questions/7118178/arrays-fill-with-multidimensional-array-in-java

 

 

 

// 출처: 백준저지 2563번 색종이 https://www.acmicpc.net/problem/2563

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class BOJ2563 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken()); // 색종이의 수 (100 이하)
        int[][] paper = new int[101][101]; // 0부터 100까지
        Arrays.stream(paper).forEach(a -> Arrays.fill(a, 0)); // 이차원 배열 paper을 0으로 채우기
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken()); // x좌표 (색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리)
            int y = Integer.parseInt(st.nextToken()); // y좌표 (색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리)
            for (int j = x; j < x + 10; j++) {
                for (int k = y; k < y + 10; k++) {
                    paper[j][k] = 1; // 해당 위치를 1로 바꾸기
                }
            }
        }
        int total = 0; // 답
        for (int i = 0; i < 101; i++) { // 1로 채워진 면적을 모두 더하기
            for (int j = 0; j < 101; j++) {
                total = total + paper[i][j];
            }
        }
        System.out.println(total); // 답
    }
}