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]++;
}
}
}
}
'알고리즘' 카테고리의 다른 글
백준 11659번 구간 합 구하기 4 (JAVA) (1) | 2023.11.20 |
---|---|
백준 1197번 최소 스패닝 트리 (JAVA) (2) | 2023.11.19 |
백준 14499번 주사위 굴리기 (JAVA) (0) | 2023.11.17 |
백준 13335번 트럭 (JAVA) (0) | 2023.11.16 |
백준 1202번 보석 도둑 (JAVA) (0) | 2023.11.15 |