본문 바로가기

알고리즘/문제 풀이

백준 2563번 색종이

2563번: 색종이 (acmicpc.net)

 

2563번: 색종이

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

www.acmicpc.net

1. 내 코드 

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        
        // 도화지 만들기
        String [][] arr= new String[100][100];
        // 도화지 안을 전부 _로 채우기
        for (int i = 0; i < 100; i++) {
            Arrays.fill(arr[i], "_");
        }
        
        // 색종이 부분은 Y로 채우기
        for (int i = 0; i < N; i++) {
            int x = sc.nextInt();
            int y = sc.nextInt();

            for (int j = x; j < x+10; j++) {
                for (int k = y; k < y+10; k++) {
                    arr[j][k] = "Y";
                }
            }
        }

        // Y의 수를 세면 색종이의 총 넓이가 나온다.
        System.out.println( Arrays.stream(arr).flatMap(Arrays::stream).filter(s -> s.equals("Y")).count());

    }
}

2. 배운 점

Arrays.fill(타겟배열, 채울 말)

채울 말로 타겟 배열에 다 채워진다. 

 

flatMap 

복잡한 자료 구조에 저장된 요소들을 내가 지정한 단순한 자료구조에 저장되도록 해준다. 

flatMap(x -> Arrays.stream(x))로 했는데, 내가 처음 쓴 배열이 2차원 배열이라 x에는 2차원 배열의 원소들인 1차원 배열들이 들어가고, 그것을 1차원 배열의 Stream으로 바꿔줬다. 

여기서 중요한 점은 2차원 배열의 원소를 전부 꺼내서 1차원 배열로 리턴해준다는 것이다.

'알고리즘 > 문제 풀이' 카테고리의 다른 글

백준 11005번 진법 변환2  (0) 2023.06.10
백준 2745번 해답  (0) 2023.06.08
백준 10798번 세로읽기  (0) 2023.06.07
백준 2566번 최댓값  (0) 2023.06.07
백준 2738번 행렬 덧셈  (0) 2023.06.07