일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- regression
- 백준
- SW Expert Academy
- spring boot
- Spring JPA
- Bitget
- 스포티파이
- C++
- Computer Science
- c
- SECS
- spotify
- python
- SECS/GEM
- 자바
- 프로그래머스
- 비트겟
- Baekjoon
- modern c++
- CS
- 회귀
- SECS-II
- Spring
- 회원가입
- Spotify Api
- Gem
- 파이썬
- SWEA
- java
- programmers
- Today
- Total
비버놀로지
[BAEKJOON 백준] 10163 색종이 본문
10163번: 색종이
평면에 색깔이 서로 다른 직사각형 모양의 색종이 N장이 하나씩 차례로 놓여진다. 이때 색종이가 비스듬하게 놓이는 경우는 없다. 즉, 모든 색종이의 변은 서로 평행하거나, 서로 수직이거나 둘
www.acmicpc.net
문제
평면에 색깔이 서로 다른 직사각형 모양의 색종이 N장이 하나씩 차례로 놓여진다. 이때 색종이가 비스듬하게 놓이는 경우는 없다. 즉, 모든 색종이의 변은 서로 평행하거나, 서로 수직이거나 둘 중 하나이다. 그림-1은 1번, 2번, 3번 세 장의 색종이가 순서대로 놓인 상태를 보여준다.
그림-1
여기에 그림-2에서 보인 것처럼 4번 색종이가 하나 더 놓이면 3번 색종이는 완전히 가려서 보이지 않게 된다. 그리고, 1번 색종이와 2번 색종이는 부분적으로 가려 보이며, 4번 색종이는 완전히 보이게 된다.
그림-2
N장의 색종이가 주어진 위치에 차례로 놓일 경우, 각 색종이가 보이는 부분의 면적을 구하는 프로그램을 작성하시오.
입력
입력의 첫 번째 줄에는 색종이의 장수를 나타내는 정수 N (1 ≤ N ≤ 100)이 주어진다. 이어서 N장의 색종이에 관한 입력이 각 색종이마다 한 줄씩 차례로 주어진다. 색종이가 놓이는 평면은 가로 최대 101칸, 세로 최대 101칸으로 구성된 격자 모양이다. 격자의 각 칸은 가로, 세로 길이가 1인 면적이 1인 정사각형이다.
편의상 가로 6칸, 세로 6칸으로 이루어진 격자의 예를 들어 설명하면, 각 칸에 표시된 값 (a,b)는 해당 칸의 번호를 나타낸다. 가장 왼쪽 아래의 칸은 (0,0) 가장 오른 쪽 위의 칸은 (5,5)이다.
색종이가 놓인 상태는 가장 왼쪽 아래 칸의 번호와 너비, 높이를 나타내는 네 정수로 표현한다. 예를 들어, 위 그림에서 회색으로 표시된 색종이는 (1,4)가 가장 왼쪽 아래에 있고 너비 3, 높이 2이므로 1 4 3 2로 표현한다. 색종이가 격자 경계 밖으로 나가는 경우는 없다.
출력
입력에서 주어진 순서에 따라 N장의 색종이를 평면에 놓았을 때, 입력에서 주어진 순서대로 각 색종이가 보이는 부분의 면적을 한 줄에 하나씩 하나의 정수로 출력한다. 만약 색종이가 보이지 않는다면 정수 0을 출력한다.
배열을 이용을 해서 색종이가 있는 위치의 크기를 출력하는 문제이다.
색종이 위치를 입력을 받아서 배열에 색종이가 있는 곳을 각 해당하는 숫자로 바꿔준다.
입력이 끝이나면 각 숫자를 세어 주어서 출력을 해준다.
색종이가 위에 있다면 아래에 있는 색종이 일부가 보이지 않게 된다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
int arr[][]=new int[101][101];
for (int i = 1; i <= N; i++) {
int x1=sc.nextInt();
int y1=sc.nextInt();
int x2=sc.nextInt();
int y2=sc.nextInt();
for (int j = x1; j < x1+x2; j++) {
for (int j2 = y1; j2 < y1+y2; j2++) {
arr[j][j2]=i;
}
}
}
for (int i = 1; i <= N; i++) {
int cnt=0;
for (int j = 0; j < 101; j++) {
for (int j2 = 0; j2 < 101; j2++) {
if(arr[j][j2]==i) {
cnt++;
}
}
}
System.out.println(cnt);
}
}
}
'ALGORITM > JAVA' 카테고리의 다른 글
[BAEKJOON 백준] 10172 개 (0) | 2021.03.01 |
---|---|
[BAEKJOON 백준] 10171 고양이 (0) | 2021.03.01 |
[BAEKJOON 백준] 10158 개미 (0) | 2021.03.01 |
[BAEKJOON 백준] 10157 자리배정 (0) | 2021.03.01 |
[BAEKJOON 백준] 9742 순열 (0) | 2021.03.01 |