-
[백준] 10163 : 색종이 - 자바(JAVA)알고리즘/백준 2022. 3. 16. 00:01
https://www.acmicpc.net/problem/10163
문제 해석
평면에 색깔이 서로 다른 직사각형 모양의 색종이 N장이 하나씩 차례로 놓인다.
색종이는 비스듬하게 놓이는 경우는 없습니다.
위의 그림에서 4번 색종이를 하나 더 놓았을 때 3번 색종이는 완전히 가려서 보이지 않게 됩니다.
다음과 같이 N장의 색종이가 주어진 위치에 차례로 놓일 경우, 각 색종이가 보이는 부분 면적을 구하는 프로그램을 작성하세요.
문제 풀이 전 설계
https://junuuu.tistory.com/124
2563 색종이 문제의 연장선으로 각 색종이마다 번호를 부여하면 쉽게 해결할 수 있습니다.
1. 1001 x 1001 보드를 만듭니다.
2. 1번 색종이의 면적은 1로 표시합니다.
3. n번 색종이의 면적은 N으로 표시합니다.
4. 이렇게 모든 색종이를 입력하면 알아서 숫자가 갱신되며 덮어씌워집니다.
5. 보드에 남아있는 숫자별로 면적을 구해서 출력합니다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main_10163_색종이 { static final int BOARD_SIZE = 1001; static int[] result; public static void main(String[] args) throws NumberFormatException, IOException { int board[][] = new int[BOARD_SIZE][BOARD_SIZE]; int area = 0; setBoardInfo(board); area = getArea(board, area); printArea(area); } private static void setBoardInfo(int[][] board) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int num = Integer.parseInt(br.readLine()); result = new int[num]; for (int t = 1; t <= num; t++) { StringTokenizer st = new StringTokenizer(br.readLine(), " "); int left = Integer.parseInt(st.nextToken()); int bottom = Integer.parseInt(st.nextToken()); int width = Integer.parseInt(st.nextToken()); int height = Integer.parseInt(st.nextToken()); for (int i = left; i < left + width; i++) { for (int j = bottom; j < bottom + height; j++) { board[i][j] = t; } } } } private static int getArea(int[][] board, int area) { for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { int temp = board[i][j]; //0이라면 빈칸이므로 continue if (temp == 0) { continue; } //0이 아니라면 result[ index ] 배열에 +1 시켜줌 // n번 색종이의 면적은 board에 n으로 표기되어 있음 //count되는 숫자만큼 넓이를 의미합니다. //temp-1을 넣어줬으므로 1번 색종이의 면적은 result[0]에 담김 result[temp-1]++; } } return area; } private static void printArea(int area) { StringBuilder sb = new StringBuilder(); for(int i : result) { sb.append(i + "\n"); } System.out.println(sb.toString()); } }
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1238번 : 파티 - 자바(JAVA) (0) 2022.03.17 [백준] 18222 : 투에-모스 문자열 - 자바(JAVA) (0) 2022.03.17 [백준] 2563 : 색종이 - 자바(JAVA) (0) 2022.03.15 [백준] 1158번 : 요세푸스 문제 - 자바(JAVA) (0) 2022.03.14 [백준] 1275번 : 커피숍2 - 자바(JAVA) (0) 2022.03.13