안드 공부를 해볼까?

[Java] 백준 직사각형 네개의 합집합의 면적 구하기 본문

알고리즘/백준

[Java] 백준 직사각형 네개의 합집합의 면적 구하기

문바리 2022. 8. 20. 17:27
728x90

1. 문제분석

삼성코테 IM등급 문제를 가볍게 풀려다가 너무 현타가와서 정리를 한다.

맨날 DFS, BFS만 머리에 있어서 기본적인 것도 못풀었다.

 

문제는 간단하다. 왼쪽아래 좌표와 오른쪽 위의 좌표 총 4개가 주어지고 이들의 면적을 구하는 것이다.

단순히 생각하면 면적을 구하고 곂치는걸 빼면 되는구나! 라고 생각을 했다.

그러다보니 조건도 복잡하고 코드도 너무 더러워졌다.

 

저 그림을 보면 무엇이 생각날까? 바로 배열이다. 해당하는 부분을 1로 채우면 곂치던 말던 범위는 구해진다.

좌표를 받아 반복문으로 배열안의 값을 넣어주면 끝이다.

2. 구현

 

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

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int[][] arr = new int[101][101];
        //입력
        for (int i = 0; i < 4; i++) {
            st = new StringTokenizer(br.readLine());
            //각 좌표를 기억
            int leftX = Integer.parseInt(st.nextToken());
            int leftY = Integer.parseInt(st.nextToken());
            int rightX = Integer.parseInt(st.nextToken());
            int rightY = Integer.parseInt(st.nextToken());

            //1로 채워주기
            for (int j = leftY; j < rightY; j++) {
                for (int k = leftX; k < rightX; k++) {
                    arr[j][k] = 1;
                }
            }
        }

        //값 구하기
        int count = 0;
        for (int i = 0; i <= 100; i++) {
            for (int j = 0; j <= 100; j++) {
                if(arr[i][j] == 1) count++;
            }
        }
        System.out.println(count);
    }
}

정말 쉬운문제다. 브론즈 1문제라고 하니 그냥 풀자.

3. 마무리

현타가 씨게 온 문제.. 이걸.. 몰라서.. 구글링을..하네..

반응형
Comments