Algorithm/Java

[Java 알고리즘] 백준 2669 직사각형 네개의 합집합의 면적 구하기

min민 2024. 10. 15.

[Java 알고리즘] 백준 2669 직사각형 네개의 합집합의 면적 구하기

//import java.io.FileReader;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;


public class Main {
    public static void main(String[] args) throws IOException {



//        String filePath = "src/algorithms/Java_Skill_Boost_Challenge/직사각형_네개의_합집합의_면적_구하기_2669/input.txt";
//        BufferedReader br = new BufferedReader(new FileReader(filePath));

        boolean[][] grid = new boolean[101][101]; // bool 타입으로 101개의 행렬 생성
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 사각형 정보를 입력받아 grid에 표시
        for (int i = 0; i < 4; i++){
            String[] input = br.readLine().split(" ");
            int x1 = Integer.parseInt(input[0]);
            int y1 = Integer.parseInt(input[1]);
            int x2 = Integer.parseInt(input[2]);
            int y2 = Integer.parseInt(input[3]);


            for(int x = x1; x < x2; x++){
                for(int y= y1; y < y2; y++){
                    grid[x][y] = true;
                }
            }

        }

        // 겹치는 영역의 넓이 계산
        int area = 0;
        for(int x = 0; x<=100; x++){
            for(int y=0; y<=100; y++){
                if(grid[x][y]){
                    area++; // true인 경우 넓이 증가.
                }
            }
        }
        System.out.println(area);







//        String filePath = "src/algorithms/Java_Skill_Boost_Challenge/직사각형_네개의_합집합의_면적_구하기_2669/input.txt";
//        BufferedReader br = new BufferedReader(new FileReader(filePath));

//          백준 진행시 아래 사용.
////        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//
////        문자열 입력시
////        String str = "";
////        str = br.readLine();
//
////         String str = br.readline();
////
////        숫자 입력시
////        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
////        int number = Integer(parseInt(br.readline()));
//
//        String line; // 파일에서 읽은 각 줄을 저장할 변수 선언
//        while ((line = br.readLine()) != null) { // 파일이 끝까지 도달할때까지 진행.
//            // 공백을 기준으로 분리하여 배열에 저장
//            String[] values = line.split(" "); // [1, 2, 4, 4]
////            System.out.println(Arrays.toString(values)); // [1, 2, 4, 4]
//            // 정수 배열로 변환
//            int[] numbers = new int[values.length];
//            for (int i = 0; i < values.length; i++) {
//                numbers[i] = Integer.parseInt(values[i]);
//            }
//
//            // 읽어온 정수 배열 출력 (예시)
//            System.out.println("읽은 정수: " + numbers[0] + ", " + numbers[1] + ", " + numbers[2] + ", " + numbers[3]);
//        }

    }
}

 

 

 

 

Python > Java로 넘어가면서 알고리즘 풀이시 몰랐던부분, 알고 넘어가야할 내용들 정리

1. String [] input = br.readLine().split("");

String[] input = br.readLine().split("");

String[] : 타입의 배열을

input : input이라는 변수명으로

br.readLine() : BufferedReader을 사용하여 한줄 읽어오기.

split("") : 읽어온 문자열을 특정 구분자로 나누는 메소드임.

 

ex)

String line = "hello";
String[] input = line.split(""); // input은 ["h", "e", "l", "l", "o"]가 됩니다.

 

-  따라서, split("")는 문자열의 각 문자를 배열의 요소로 변환하는 역할을 한다.

 

 

2. 배열 생성 및 초기화시 초기값:

false임.

boolean[][] grid = new boolean[101][101];

 

 

3. split()

- 간단하게 ~기준으로 나눈다는것임,

split() 메소드는 Java에서 문자열 객체의 메소드로 문자열을 특정 구분자를 기준으로 나누어 배열로 반환한다. 

 

ex) 공백나누기

String input = "Hello World Java";
String[] words = input.split(" "); // 공백을 기준으로 나눈다.
// words는 ["Hello", "World", "Java"]가 됨.

 

ex) 쉼표로 나누기

String input = "apple,banana,orange";
String[] fruits = input.split(","); // 쉼표를 기준으로 나눔.
// fruits는 ["apple", "banana", "orange"]

 

여러 구분자 사용

String input = "one,two;three four";
String[] parts = input.split("[,; ]"); // 쉼표, 세미콜론, 공백을 모두 구분자로 사용한다
// parts는 ["one", "two", "three", "four"]

 

- 주의할점.

 

  • 정규 표현식: split()의 매개변수는 정규 표현식이므로, 특정 패턴에 따라 문자열을 나눌 수 있다. 예를 들어, [ ,;]는 공백, 쉼표, 세미콜론을 구분자로 사용하는 패턴이다.
  • 빈 문자열: 만약 구분자가 문자열의 시작이나 끝에 있거나 연속해서 나타나면, 결과 배열에 빈 문자열이 포함될 수 있다.

빈 문자열 ex)

String input = "apple,,banana"; 
String[] result = input.split(","); // result는 ["apple", "", "banana"]

 

 

 

 

 

 

 

 

댓글