Hope Everyone Is Happy

[브론즈1] 10163. 색종이 (Java) 본문

※ 백준 (Baekjoon)/[Java] 문제 풀이 ( Solve the problems)

[브론즈1] 10163. 색종이 (Java)

J 크 2023. 8. 27. 20:22
728x90
반응형

https://www.acmicpc.net/problem/10163

 

10163번: 색종이

평면에 색깔이 서로 다른 직사각형 모양의 색종이 N장이 하나씩 차례로 놓여진다. 이때 색종이가 비스듬하게 놓이는 경우는 없다. 즉, 모든 색종이의 변은 서로 평행하거나, 서로 수직이거나 둘

www.acmicpc.net

IM, A형 테스트 화이팅입니다~!!


※  문제를 요약하면 아래와 같습니다.

  색종이를 1번~N번까지 N장 놓았을 때 각 색종이는 겹쳤을 경우 나중에 놓은 색종이가 더 위로 쌓이게 됨

 이 때, 각 색종이의 보이는 부분의 면적을 출력

 색종이를 놓는 보드의 크기는 1001 x 1001로 지정

 Input : 첫줄에 색종이의 수 및 다음 줄 부터 각 색종이의 정보를 입력

                색종이의 정보 - 가장 왼쪽 아래 좌표, 너비(가로)와 높이(세로)

 Output : 각 색종이의 면적 출력


◈ Input - 1

2
0 0 10 10
2 2 6 6

◈ Output - 1

64
36

◈ Input - 2

3
0 2 10 10
7 9 8 4
8 4 10 6

◈ Output - 2

81
25
60

 ◎  코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.

1001x10001 색종이 보드의 배열을 선언

▶ 1번 부터 주어진 색종이의 정보에 인덱스 정보를 삽입

▶ 1,2 번이 겹칠 경우 2번으로 덮어 씌워짐

▶ 주어진 색종이 수 만큼 좌표 정보 입력 후, 각 색종이 번호의 값을 가지는 배열의 원소를 카운트하여 출력


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 {
		// TODO Auto-generated method stub
		BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bWriter = new BufferedWriter(new OutputStreamWriter(System.out));

		int nPapers = Integer.parseInt(bReader.readLine());

		int[][] narrBoard = new int[1001][1001];

		for (int p = 1; p <= nPapers; p++) {
			StringTokenizer st = new StringTokenizer(bReader.readLine());

			int nCol = Integer.parseInt(st.nextToken());
			int nRow = Integer.parseInt(st.nextToken());
			int nWidth = Integer.parseInt(st.nextToken());
			int nHeight = Integer.parseInt(st.nextToken());

			for (int i = nRow; i < nRow + nHeight; i++) {
				for (int j = nCol; j < nCol + nWidth; j++) {
					narrBoard[i][j] = p;
				}
			}
		}

		for (int p = 1; p <= nPapers; p++) {
			int nCount = 0;
			for (int i = 0; i < 1001; i++) {
				for (int j = 0; j < 1001; j++) {
					if (narrBoard[i][j] == p)
						nCount++;
				}
			}
			bWriter.write(nCount + "\n");
		}

		bWriter.flush();

		bWriter.close();
	}
}

읽어주셔서 감사합니다!

Good Luck! (피드백 감사합니다!)