📍 색종이
https://www.acmicpc.net/problem/10163
0 2 10 10 은 차례대로 색종이의 맨 왼쪽 아래 x, y좌표, 너비, 높이이다.
따라서 색종이의 네 좌표는 아래 왼쪽 -> 아래 오른쪽 -> 위 오른쪽 -> 위 왼쪽 순서대로
(0, 2), (10, 2), (10, 12), (0, 12)이고,
이는 (0, 2), (0+10, 2), (0+10, 2+10), (0, 2+10)이다.
해야할 것은 총 3가지이다.
1. 면적 입력받기
2. 번호 표시하기
3. 번호 세기
1. 면적 입력받기
int startX = Integer.parseInt(st.nextToken());
int startY = Integer.parseInt(st.nextToken());
int endX = startX + Integer.parseInt(st.nextToken());
int endY = startY + Integer.parseInt(st.nextToken());
2. 번호 표시하기
for(int x=startX; x<=endX; x++){
for(int y=startY; y<=endY; y++){
array[x][y] = i;
}
}
3. 번호 세기
색종이의 면적을 인덱스에 맞게 저장하기 위해 배열 cntArray의 크기는 색종이의 수+1 이다.
int[] cntArray = new int[N+1];
for(int i=0; i<array.length; i++){
for(int j=0; j<array[i].length; j++){
cntArray[array[i][j]] += 1;
}
}
✨ 전체코드 ✨
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N;
static int[][] array;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(sc.readLine());
array = new int[1001][1001];
for (int i = 1; i <= N; i++) {
// 1. 면적 입력받기
st = new StringTokenizer(sc.readLine());
int startX = Integer.parseInt(st.nextToken());
int startY = Integer.parseInt(st.nextToken());
int endX = startX + Integer.parseInt(st.nextToken());
int endY = startY + Integer.parseInt(st.nextToken());
// 2. 번호 표시하기
PaintNumber(i, startX, startY, endX, endY);
}
// 3. 번호 세기
CountNumber();
System.out.println(sb);
}
// 2.
private static void PaintNumber(int i, int startX, int startY, int endX, int endY) {
for (int x = startX; x < endX; x++) {
for (int y = startY; y < endY; y++) {
array[x][y] = i;
}
}
}
// 3.
private static void CountNumber() {
int[] cntArray = new int[N + 1];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if (array[i][j] > 0) {
cntArray[array[i][j]]++;
}
}
}
for (int i = 1; i <= N; i++) {
sb.append(cntArray[i]).append("\n");
}
}
}
🌀 성능
- 메모리 : 18,940 KB
- 시간 : 168 ms
처음엔 main 함수에 다 때려박았다가 나중에 기능마다 함수로 따로 빼서 구현했더니
메모리와 시간 성능이 거의 2배나 줄었다. ㄷㄷ
'Algorithm > Boj' 카테고리의 다른 글
[JAVA | 백준] #15836 Matrix Multiplication Calculator 🧮 (0) | 2024.07.09 |
---|---|
[JAVA | 백준] #1237 정ㅋ벅ㅋ (0) | 2024.07.08 |
[JAVA | 백준] #25277 Culture shock 😱⚡️ (0) | 2024.07.03 |
[JAVA | 백준] #2869 달팽이는 올라가고 싶다 🐌🆙 (0) | 2024.06.17 |
[JAVA | 백준] #2292 벌집 🐝🏠 (0) | 2024.06.08 |