[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"]
'Algorithm > Java' 카테고리의 다른 글
[Java 알고리즘] 백준 2309 일곱난쟁이 (1) | 2024.10.19 |
---|---|
[Java 알고리즘] 백준 2635 수 이어가기 (0) | 2024.10.15 |
ConvertListtoObject 2차원 배열을 HashMap으로 리턴하기 (0) | 2023.01.20 |
문자열 첫 글자 대문자로 리턴하기 [letterCapitalize] // .split() .substring() .join() (0) | 2023.01.19 |
HashMap 빈배열 첫번째, 마지막 요소를 키와 값으로 하는 HashMap 생성하기 (0) | 2023.01.12 |
댓글