[Java] 백준 2563 색종이

Lee GaEun·2024년 11월 28일

[Java] 알고리즘

목록 보기
25/93

2563 색종이 문제 링크

문제분석

  • 가로, 세로가 각각 100인 정사각형의 흰색 도화지에
    가로, 세로가 각각 10인 정사각형의 검은색 색종이를
    색종이 변과 도화지 변이 평행하도록 붙임
  • 색종이가 붙은 검은 영역의 넓이를 구하라
  • ex) 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260임

제약 사항

입력 조건

  • 첫째 줄 : 색종이의 수 N (1 ≤ N ≤ 100)
  • 둘째 줄 : 색종이를 붙인 위치
    • 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리
    • 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리

출력 조건

  • 색종이가 붙은 검은 영역의 넓이 출력

#1

  • 색종이 전체 넓이에서 겹치는 넓이를 뺌
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    static Scanner sc = new Scanner(System.in);
    public static void main(String[] args) {
        int N = sc.nextInt();
        int[][] arr = new int[N][2];
        int answer = 100 * N;

        for(int i=0; i<N; i++) {
            arr[i][0] = sc.nextInt();
            arr[i][1] = sc.nextInt();
        }

        for(int j=0; j<N-1; j++) {
            for(int i=j+1; i<N; i++) {
                if(arr[j][0] + 10 > arr[i][0] && arr[j][0] < arr[i][0] + 10) {
                    if(arr[i][1] + 10 > arr[j][1] && arr[i][1] < arr[j][1] + 10) {
                        System.out.println("before" + answer + "   " + i + j);
                        answer -= ((arr[j][0] + 10) - arr[i][0]) * ((arr[i][1] + 10) - arr[j][1]);
                        System.out.println("after" + answer);
                    }
                }
            }
        }

        System.out.println(answer);
    }
}

  • 색종이 3개 이상 겹치는 경우를 생각 안 함
  • 이런 식으로 하려면 색종이가 몇 개 얼만큼 겹치는지 다 구해야 됨
  • 엄청 복잡해짐..

#2

  • 다른 블로그 살짝 훔쳐봄,,.,.,
  • 길이가 100 100인 이줄 배열 선언해서
  • 색종이가 붙어있는 부분만 1을 넣어줌
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    static Scanner sc = new Scanner(System.in);
    public static void main(String[] args) {
        int N = sc.nextInt();
        int[][] quad  = new int[101][101];
        int[][] arr = new int[N][2];
        int answer = 0;

        for(int i=0; i<N; i++) {
            arr[i][0] = sc.nextInt();
            arr[i][1] = sc.nextInt();
        }

        for(int i=0; i<N; i++) {
            for(int a=0; a<10; a++) {
                for(int b=0; b<10; b++) {
                    quad[arr[i][0]-1+a][arr[i][1]-1+b] = 1;
                }
            }
        }

        for(int i=0; i<100; i++) {
            for(int j=0; j<100; j++) {
                answer += quad[i][j] == 1 ? 1 : 0;
            }
        }
        System.out.println(answer);
    }
}

  • 성공..
  • 좀 어이없음..
profile
I will give it my all (๑•̀o•́๑)ง

0개의 댓글