scone-lemon

[IM 대비] BOJ_10163 색종이 본문

ALGORITHM/BOJ

[IM 대비] BOJ_10163 색종이

lemon-scone 2021. 8. 29. 09:15

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);
		}
	}
}