[BOJ 10163] 색종이

업데이트:

문제

  • BOJ 10163
  • 문제의 저작권은 Baekjoon Online Judge에 있습니다.

접근방식

2차원 배열map을 만든 후 다음 색종이가 입력되면 해당하는 색종이 면적의 좌표를 새로운 색종이 번호로 덮어 씌운다. 그리고 이 색종이 번호를 인덱스로 하는 1차원 배열 rec을 만들고 map을 돌면서 색종이 번호를 인덱스로 하는 rec의 배열값을 증가시킨다. 그리고 rec에 저장된 값을 인덱스1부터 순차적으로 출력해주면 답이 나온다.

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		StringTokenizer st;
		int num = Integer.parseInt(br.readLine()); //색종이 수
		int[][] map = new int[101][101]; //0번~100번
		int maxNum = 0;
		
		for(int cnt=1; cnt<=num; cnt++) {
			st = new StringTokenizer(br.readLine());
			
			int x = Integer.parseInt(st.nextToken());
			int y = Integer.parseInt(st.nextToken());
			int width = Integer.parseInt(st.nextToken());
			int height = Integer.parseInt(st.nextToken());
			
			for(int i=0; i<width; i++) {
				for(int j=0; j<height; j++) {
					map[x+i][y+j] = cnt; //색종이 번호
				}
			}
		}
		
		int[] rec = new int[num+1]; //1번~num번
		//색종이 번호 별 면적 구하기
		for(int i=0; i<101; i++) {
			for(int j=0; j<101; j++) {
				rec[map[i][j]]++;
			}
		}
		
		for(int i=1; i<=num; i++) {
			bw.write(rec[i]+"");
			bw.newLine();
		}
		
		bw.flush();
		bw.close();
		br.close();
	}
}

카테고리:

업데이트: