알고리즘/구현
[백준알고리즘] 구현 - 2669번 직사각형 네개의 면적 구하기 문제
Fenderblue
2023. 4. 26. 01:42
https://www.acmicpc.net/problem/2669
2669번: 직사각형 네개의 합집합의 면적 구하기
입력은 네 줄이며, 각 줄은 직사각형의 위치를 나타내는 네 개의 정수로 주어진다. 첫 번째와 두 번째의 정수는 사각형의 왼쪽 아래 꼭짓점의 x좌표, y좌표이고 세 번째와 네 번째의 정수는 사각
www.acmicpc.net
아오!!!!!!!!!!현타와..
처음에 문제보고 사각형들이 겹치는 부분들을 어떻게 다 빼지..겹치는지 아닌지 판단하는 코드 어떻게 짜지..
한번만 겹치는것도 아니고 네개가 다 뭉쳐있으면 그걸 어떻게 일일히 다 뺴지....
막 막 고민하다가 미치겠어서(브론즈 문제라 더 미치는줄알았음) 결국 힌트만 얻어갈까 하고 찾아봤는데
걍 2차원 배열로 풀면 끝나는 문제였다
100x100배열 만들어놓고 해당되는 x좌표의 시작점~끝점, Y좌표의 시작점 ~끝점 2중for문 만들어서
해당되는 위치에 1이라던지 뭘 넣어서 체크하고 그 부분들만 세면 되겠구나..
이미 1이 들어간 위치는 어차피 중복이라는 의미이므로 건너뛰게 했고 최초로 1의 값을 넣게될때마다 count해서
총 면적을 구했다.
하...처음부터 이렇게 접근했으면 쉬웠을텐데 왜 그렇게 생각을 못했을까 너무 짱난다
알고보면 쉽게 풀리는 문제가 아예 어려운 문제보다 심적으로 타격을 주는 것 같다.ㅎㅎ
더 열심히 해야지 모..브론즈 문제라고 안풀지 말고 골고루 풀어야겠다고 느꼈다
풀이코드
package baekjoonWeek4;
import java.io.*;
import java.util.StringTokenizer;
public class FourSquares { //백준 2669번 네 직사각형의 면적 구하기 문제
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int[][] board = new int[100][100];
int xs; int xe; int ys; int ye;
int count = 0; //배열에 몇번 1이 들어가는지 세줄것임
for (int i = 0; i < 4; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
xs = Integer.parseInt(st.nextToken()); //x좌표 시작점
ys = Integer.parseInt(st.nextToken()); //y좌표 시작점
xe = Integer.parseInt(st.nextToken()); //X좌표 끝점
ye = Integer.parseInt(st.nextToken()); //y좌표 끝점
for (int x = xs; x < xe; x++) {
for (int y = ys; y < ye; y++) {
if (board[x][y] == 1) { //이미 1이라면 중복되는 부분이라는 의미니까 안세고 넘어감
continue;
}
board[x][y] = 1;
count++;
}
}
}
bw.write(Integer.toString(count));
bw.flush();
bw.close();
}
}