scone-lemon
[IM 대비] BOJ_10163 색종이 본문
https://www.acmicpc.net/problem/10163
10163번: 색종이
평면에 색깔이 서로 다른 직사각형 모양의 색종이 N장이 하나씩 차례로 놓여진다. 이때 색종이가 비스듬하게 놓이는 경우는 없다. 즉, 모든 색종이의 변은 서로 평행하거나, 서로 수직이거나 둘
www.acmicpc.net
색종이 문제는 많이 접해본 것 같은 착각이 들어서(?) 무조건 맵에 1부터 찍으려는 변태성향이 생겼다!
하지만 조금 천천히 생각해보면 무조건 1만 찍어야 되는게 아니고 영역별로 해당번째 숫자를 찍어도 되는 건데, 고정관념이나 생각의 한계를 무너뜨리는 연습이 필요할 것 같다.
1만 찍어놓고 아 어떡하지 하다가 솔직히 구글링을 살짝!..! 했다. 그래서 map[][] 에 1을 안찍고 n을 찍는 걸 보고 깊은 깨우침을 받고 바로 코드를 수정해서 냈다.
package IM_0829;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BOJ_10163 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int N = Integer.parseInt(br.readLine());
int[][] map = new int[1001][1001];
// 각 영역을 표시
for (int n = 1; n <= N; n++) {
st = new StringTokenizer(br.readLine(), " ");
int posx = Integer.parseInt(st.nextToken());
int posy = Integer.parseInt(st.nextToken());
int widx = Integer.parseInt(st.nextToken());
int widy = Integer.parseInt(st.nextToken());
for (int x = posx; x < posx + widx; x++) {
for (int y = posy; y < posy + widy; y++) {
map[x][y] = n;
}
}
}
// 각 영역을 카운팅
for (int n = 1; n <= N; n++) {
int count = 0;
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
if (map[i][j] == n) {
count++;
}
}
}
System.out.println(count);
}
}
}
'ALGORITHM > BOJ' 카테고리의 다른 글
[IM 대비] BOJ_2563 색종이 (0) | 2021.08.29 |
---|---|
[IM 대비] BOJ_2669 직사각형 네개의 합집합의 면적 구하기 (0) | 2021.08.29 |
[IM 대비] BOJ_3041 N-퍼즐 (0) | 2021.08.29 |
[IM 대비] BOJ_2567 색종이-2 (0) | 2021.08.29 |
[IM 대비] BOJ_2810 컵홀더 (0) | 2021.08.29 |