Hope Everyone Is Happy

[실버5] 2063. 색종이 (Java) 본문

※ 백준 (Baekjoon)/[Java] 문제 풀이 ( Solve the problems)

[실버5] 2063. 색종이 (Java)

J 크 2023. 7. 20. 00:19
728x90
반응형

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

 

2563번: 색종이

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

www.acmicpc.net

 이번엔 릿코드 문제가 아닌 백준 문제를 풀어보았습니다! 아직 기초가 부족하다보니 기초적인 문제부터 풀이를 시작하려고 합니다.


 해당 문제는 100 x 100 사이즈의 도화지 위에 가로, 세로 크기가 각각 10인 정사각형 모양의 검은색 색종이를 100개 이하의 수를 입력받아 붙입니다. 그 이후 색종이가 붙은 영역의 넓이를 구하여 출력합니다.

 입력 값은 첫줄에 색종이의 갯수, 두번째 줄 이후엔 각 색종이의 가장 왼쪽 아래 좌표를 순서대로 col, row의 좌표를 입력합니다.

.Input

3
3 7
15 7
5 2

 출력 값은 색종이가 붙인 영역의 넓이를 출력합니다.

Output

260

 

 코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.

▶ 색종이는 무조건 100의 넓이를 가짐.

▶ 색종이 영역은 = 색종이 갯수 *  100 - 겹치는 영역의 넓이

▶ 도화지는 100x100은 boolean 형태의 배열로 표현하여 겹치는 영역 구분.

public class Main {
   public static void main(String[] args) {
	    Scanner sc = new Scanner(System.in);
        int nPaperCount = sc.nextInt();
        
        boolean[][] bPaper = new boolean[100][100];
        
        // 100 * size - else = area
        int nPaperArea = 100 * nPaperCount;
        
        for(int k = 0; k < nPaperCount; k++) {
            int nCol = sc.nextInt();
            int nRow = sc.nextInt();
            
            int nCount = 0;
            for(int i = nRow; i < nRow + 10; i++) {
                for(int j = nCol ; j < nCol + 10 ; j++) {
                    if(bPaper[i][j])    nCount++;
                    else                bPaper[i][j] = true;
                }
            }
            nPaperArea -= nCount;
        }
        
        System.out.println(nPaperArea);
   }
}

 점점 알고리즘 문제 풀이에 조금씩 적응이 되가는 것 같습니다. 더욱 열심히 해서 어려운 문제도 재밌게 풀 수 있는 실력이 빨리 되고 싶네요! ( 한글 너무 반갑...)