728x90
반응형
문제
https://www.acmicpc.net/problem/10163
풀이 방법
이 문제는 서브태스크로 채점이되는 문제이다. 서브태스크 문제는 약간 예외를 생각하기 좋은 것 같다.
문제를 간단하게 설명하자면 여러장의 색종이를 순서대로 놓는데 겹쳐서 놓을 수가 있다.
출력값으로 색종이를 다 놓았을 때 각각의 색종이가 보이는 면적을 출력해야한다.
(https://yoon990.tistory.com/33 이 문제가 생각이 났다.)
그래서 위에서 언급한 문제를 응용해서 이번에는 무조건 1로만 채우는 것이 아니라 색종이의 번호를 넣어주는 식으로 생각을 했다. 첫번째 색종이 면적은 1로, 2번째면 2로 .. 이런식으로 N번째 색종이까지 다 채운 후,
마지막에 1부터 N까지 map에 자신에 해당하는 번호가 몇 개가 있는지 세서 출력해줬다.
제출 코드
import java.io.*;
import java.util.*;
public class BJ_10163_색종이 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); //색종이 장 수
int[][] map = new int[1001][1001];
int[][] papers = new int[N][4];
for (int i = 1; i <= N; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken()); //열
int y = Integer.parseInt(st.nextToken()); //행
int w= Integer.parseInt(st.nextToken()); //너비 => 열의 범위
int h = Integer.parseInt(st.nextToken()); //높이 => 행의 범위
papers[i-1] = new int[] {x, y, w, h };
for (int j = y; j < y+h; j++) {
for (int k = x; k < x+w; k++) {
map[j][k] = i;
}
}
}
for (int i = 1; i <= N; i++) {
int cnt =0;
for (int j = papers[i-1][1]; j < papers[i-1][1]+ papers[i-1][3]; j++) {
for (int k = papers[i-1][0]; k <papers[i-1][0] +papers[i-1][2]; k++) {
if(map[j][k] == i )cnt++;
}
}
System.out.println(cnt);
}
}
}
728x90
반응형
'알고리즘 > BJ' 카테고리의 다른 글
[BJ] 백준 1753 최단경로(JAVA) (0) | 2022.03.12 |
---|---|
[BJ] 백준 10158 개미(JAVA) (0) | 2022.03.10 |
[BJ] 백준 2628 종이자르기 (JAVA) (0) | 2022.03.07 |
[BJ] 백준 15686 치킨배달 (JAVA) (0) | 2022.03.05 |
[BJ] 백준 2635 수 이어가기 (JAVA) (1) | 2022.03.02 |