백준 2563번 색종이

Montag·2023년 2월 1일
1

문제풀이

목록 보기
2/10

2563번 색종이

문제
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.

예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.

입력
첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다

출력
첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.

예제 입력 1
3
3 7
15 7
5 2

예제 출력 1
260


나의 풀이

2차원 배열 문제이기 때문에, 전체 크기 사이즈의 2차원 배열을 생성하고,
해당 좌표부터 x축 10, y축 10만큼의 값을 변경해주면 된다고 생각했다

따라서 전체 배열의 값을 0으로 초기화하여 생성하고
해당 범위부터 칠해지는 값을 1로 변경한다

중복은 없기 때문에 0인 경우만 1로 바꿔주면 된다
또한 범위 초과도 없으므로, 구현이 더 쉬웠다

1인 값을 찾는 cnt 변수를 하나 생성하여
2차원 배열의 1 값을 모두 더하면, 칠해진 넓이가 된다

코드는 다음과 같다


코드

package matrix2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class _2563_색종이 {
	public static void main(String[] args) throws IOException {

		int[][] arr = new int[100][100];

		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

		int T = Integer.parseInt(bf.readLine());
		int cnt = 0;
		for (int tc = 0; tc < T; tc++) {

			StringTokenizer st = new StringTokenizer(bf.readLine());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());

			for (int r = a; r < a + 10; r++) {
				for (int c = b; c < b + 10; c++) {
					arr[r][c] = 1;
				}
			}

		}
		for (int r = 0; r < 100; r++) {
			for (int c = 0; c < 100; c++) {
				if (arr[r][c] == 1) {
					cnt++;
				}
			}
		}
		System.out.println(cnt);

	}
}
profile
안녕하세요

3개의 댓글

comment-user-thumbnail
2023년 2월 1일

색종이 찢어버리고 싶었는데 풀이 덕분에 색종이 살렸습니다. 감사합니다!

1개의 답글
comment-user-thumbnail
2023년 2월 1일

찢어버리고 싶었는데 풀이 덕분에 살렸습니다. 감사합니다!

답글 달기