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