-
[백준] 2563 : 색종이 - 자바(JAVA)알고리즘/백준 2022. 3. 15. 00:01반응형
https://www.acmicpc.net/problem/2563
2563번: 색종이
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록
www.acmicpc.net
문제 해석
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다.
이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 변과 도화지의 변이 평행하도록 붙입니다.
여러 장의 색종이를 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.(종이가 겹치게 붙을 수 있습니다.)
입력
첫째 줄에 색종이의 수가 주어집니다.
이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어집니다.
첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리입니다.
두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리입니다.
문제 풀이 전 설계
처음에 겹치는 영역을 계산해주고 뺴주어야 하나?
겹치는 영역이 많아질수록 빼주어야 하는 부분이 많은데 어떻게 해야 할까?
라는 고민들을 하였지만 머릿속에 색종이가 겹치던 겹치지 않던 색종이가 붙여지는 곳은 1로 표시한다면 1의 개수만 더해주면 넓이가 나올 것입니다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main_2563_색종이 { static final int BOARD_SIZE = 100; static final int PAPER_SIZE = 10; static final int checked = 1; 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()); for (int t = 0; t < num; t++) { StringTokenizer st = new StringTokenizer(br.readLine(), " "); int left = Integer.parseInt(st.nextToken()); int bottom = Integer.parseInt(st.nextToken()); for (int i = left; i < left + PAPER_SIZE; i++) { for (int j = bottom; j < bottom + PAPER_SIZE; j++) { board[i][j] = checked; } } } } private static int getArea(int[][] board, int area) { for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { if (board[i][j] != checked) { continue; } area++; } } return area; } private static void printArea(int area) { System.out.println(area); } }
static final int를 통하여 상수를 사용하면 조금 더 깔끔한 코드가 될 것 같아 사용했습니다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 18222 : 투에-모스 문자열 - 자바(JAVA) (0) 2022.03.17 [백준] 10163 : 색종이 - 자바(JAVA) (0) 2022.03.16 [백준] 1158번 : 요세푸스 문제 - 자바(JAVA) (0) 2022.03.14 [백준] 1275번 : 커피숍2 - 자바(JAVA) (0) 2022.03.13 [백준] 7562 : 나이트의 이동 - 자바(JAVA) (0) 2022.03.09