반응형
https://www.acmicpc.net/problem/2563
2563번: 색종이
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록
www.acmicpc.net
1. 접근
- 한 도화지에 색종이를 여러장 놓고 색종이가 붙은 검은 영역의 넓이를 구하는 문제이다.
- 넓이를 구하는 것이라고 해서 수학적으로 접근하여 겹치는 넓이부터해서 구하려고 하면 매우 복잡해진다.
- 도형의 넓이를 구할때 가로와 세로를 곱해서 구할 수도 있지만, 1cm x 1cm의 칸으로 나눠서 하나씩 셀 수도 있다.
- 이 문제도 위와같이 접근한다.
- 도화지에 100 x 100으로 모눈이 그려져 있고, 색종이를 붙인 다음 그 모눈을 하나씩 칸을 세면 된다.
- 겹쳐져진다고 해서, 한장 붙여진것 위에 한장이 더 붙는다고 해서 달라지는건 없다. 영역은 똑같다.
2. 구현
- 이차원 배열에 색종이가 붙은 부분을 1로 표시하였다면 이중for문을 사용하여 (0,0)부터 (100,100)까지 모든 칸을 순차적으로 방문하며 1을 만날때마다 카운트를 해준다.
package com.ssafy.offlline08;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_2563_색종이_S5_2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); //색종이의 수가 주어진다.
int[][] paper = new int[100][100]; //100 by 100 인 도화지
for(int i = 1; i <= N; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken()); //첫번째 자연수는 x 좌표
int y = Integer.parseInt(st.nextToken()); //두번째 자연수는 y 좌표
for(int j = x; j < x + 10; j++) {
for(int k = y; k < y + 10; k++) {
paper[j][k] = 1;
}
}
}
int count = 0;
for(int j = 0; j < 100; j++) {
for(int k = 0; k < 100; k++) {
if(paper[j][k] == 1) {
count += 1;
}
}
}
System.out.println(count);
}
}
반응형
'Algorithm 알고리즘 > BAEKJOON 백준' 카테고리의 다른 글
[백준]BOJ_10816_숫자 카드 2_S4 (0) | 2023.08.06 |
---|---|
[백준]BOJ_2178_미로 탐색_S1 (0) | 2023.02.20 |
백준 색종이 (0) | 2023.02.07 |
[BAEKJOON][실버1] - 단지번호 붙이기(2667번) (0) | 2023.01.26 |
[BAEKJOON][실버1] - 안전영역(2468번) (0) | 2023.01.24 |