알고리즘
백준 1531번 투명 (JAVA)
박카스마시며코딩
2023. 11. 18. 20:32
https://www.acmicpc.net/problem/1531
1531번: 투명
첫째 줄에 N과 M이 주어진다. N은 0보다 크거나 같고, 50보다 작거나 같다. M은 0보다 크거나 같고, 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 종이의 좌표가 주어진다. 왼쪽 아래 모서리의 x, y좌
www.acmicpc.net
저는 구현을 통해 문제를 해결하였습니다.
먼저 입력으로 들어온 좌표사이의 값을 모두 하나씩 올리고 마지막에 전체적으로 m보다 큰 값이 몇개 있는지를 찾아 문제를 해결하였습니다.
package BOJ.etc;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_1531 {
private static final int SIZE = 100;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[][] cnt = new int[SIZE+1][SIZE+1];
for(int i = 0 ; i < n ; i++){
st = new StringTokenizer(br.readLine());
int startY = Integer.parseInt(st.nextToken())-1;
int startX = Integer.parseInt(st.nextToken())-1;
int endY = Integer.parseInt(st.nextToken())-1;
int endX = Integer.parseInt(st.nextToken())-1;
appendPaper(cnt,startY,startX,endY,endX);
}
int result = countMoreM(cnt,m);
System.out.println(result);
}
private static int countMoreM(int[][] cnt, int m) {
int result = 0;
for(int i = 0 ; i <= SIZE; i++){
for(int j = 0 ; j <= SIZE ; j++){
if(cnt[i][j] > m ){
result++;
}
}
}
return result;
}
private static void appendPaper(int[][] cnt, int startY, int startX, int endY, int endX) {
for(int i = startY ; i <= endY; i++){
for(int j = startX ; j <= endX ; j++){
cnt[i][j]++;
}
}
}
}