
난이도: ★★★☆☆ • solved on: 2025-07-05

int[][]) : 전체 평면(도화지)에서 색종이가 덮인 영역을 표시
- 문제 분해
- 입력 좌표마다 10×10 영역을 2차원 배열에 표시(1로 채움)
- 모든 영역을 합산해 1이 된 칸 개수를 카운트
- 핵심 로직 흐름
for (각 색종이 좌표): for (10행): for (10열): 해당 칸 extents[x + j][y + i] = 1 결과적으로 1로 표시된 모든 칸을 합산 → 넓이- 예외 처리
- 색종이가 도화지를 벗어나는 입력은 주어지지 않으므로 별도 예외 처리 필요 없음
import java.util.*;
import java.lang.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int nums = Integer.parseInt(br.readLine());
int[][] papers = new int[nums][2];
int maxWidth = 0;
int maxHeight = 0;
int result = 0;
for(int i=0;i<nums;i++){
String[] line = br.readLine().split(" ");
papers[i][0] = Integer.valueOf(line[0]);
papers[i][1] = Integer.valueOf(line[1]);
if(papers[i][0]+10>maxWidth){
maxWidth = papers[i][0]+10;
}
if(papers[i][1]+10>maxHeight){
maxHeight = papers[i][1]+10;
}
}
int[][] extents = new int[maxWidth][maxHeight];
for(int[] paper:papers){
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
extents[paper[0]+j][paper[1]+i] = 1;
}
}
}
for(int i=0;i<extents.length;i++){
for(int j=0;j<extents[i].length;j++){
result+=extents[i][j];
}
}
System.out.println(result);
}
}
대부분 입력이 0~90 범위에만 주어지므로, 굳이 maxWidth, maxHeight를 계산하지 않고 고정 100×100 배열 사용 가능
중복된 칸을 1번만 센다는 점을 활용
- 문제 분해
- 100×100 도화지 배열 생성
- 색종이 좌표에 따라 해당 10×10 영역을 1로 마킹
- 핵심 로직
for (입력 좌표): for (10행): for (10열): board[x + i][y + j] = 1 결과적으로 1로 마킹된 칸만 카운트- 예외 처리
- 입력 범위가 보장됨(0~100-10) → 오버플로우 없음
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[][] board = new int[100][100];
for(int i=0;i<n;i++){
String[] line = br.readLine().split(" ");
int x = Integer.parseInt(line[0]);
int y = Integer.parseInt(line[1]);
for(int dx=0;dx<10;dx++){
for(int dy=0;dy<10;dy++){
board[x+dx][y+dy] = 1;
}
}
}
int result = 0;
for(int i=0;i<100;i++){
for(int j=0;j<100;j++){
if(board[i][j] == 1) result++;
}
}
System.out.println(result);
}
}
방법 1
- 시간 복잡도: O(N × 100) (색종이 N장 × 각 10×10영역 처리)
- 공간 복잡도: O(W × H) (최대 100×100)
방법 2
- 시간 복잡도: O(N × 100) (배열 크기 고정)
- 공간 복잡도: O(1) (배열 크기 고정, 입력 크기에 무관)
maxWidth, maxHeight 계산 불필요)비슷한 유형 (GPT 추천):
확장 문제 (GPT 추천):