728x90
[문제 - 10800번: 컬러볼 (JAVA)]
[접근 방법]
예제 1을 통해 설명하겠다.
1) 'index', 'color', 'size' 의 속성을 갖는 Ball 클래스를 통해, 공 정보를 다룬다.
2) 공 크기에 따라 Ball 배열을 정렬한다.
정렬된 공의 배열을 차례로 탐색한다.
탐색 차례의 공 (currentBall) 보다 작은 공의 size 를 sum 에 누적한다.
color 별 공 size 를 colors[] 배열의 해당 color에 누적한다.
currentBall 의 획득 가능한 점수 sum - colors[currentBall.color] (같은 크기의 공은 먹을 수 없다.) 를 구하여, result[] 배열에 저장한다.
3) balls[0] 탐색
4) balls[1] 탐색
5) balls[2] 탐색
6) balls[3] 탐색
[JAVA 코드]
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BOJ_10800 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//공의 개수 : N
int N = Integer.parseInt(br.readLine());
//0 ~ N-1 : N 개의 ball 정보
Ball[] balls = new Ball[N];
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int c = Integer.parseInt(st.nextToken()); //color
int s = Integer.parseInt(st.nextToken()); //size
Ball ball = new Ball(i, c, s);
balls[i] = ball;
}
//크기에 따라 Ball을 정렬 (오릌차순 정렬)
Arrays.sort(balls, (ball1, ball2) -> ball1.size - ball2.size);
int[] result = new int[N]; //balls[index] 가 잡을 수 있는 공의 크기 합
int[] colors = new int[N + 1]; //색상 별 크기의 합
int ball_index = 0;
int sum = 0; //색상 상관없이, 작은 공 크기 합
for(int i = 0; i < N; i++) {
Ball currentBall = balls[i];
while (balls[ball_index].size < currentBall.size) {
sum += balls[ball_index].size;
colors[balls[ball_index].color] += balls[ball_index].size;
ball_index++;
}
result[currentBall.index] = sum - colors[currentBall.color];
}
for (int i = 0; i < N; i++) {
bw.write(result[i] + "\n");
}
bw.flush();
bw.close();
}
//ball class
public static class Ball {
int index, color, size;
public Ball (int index, int color, int size) {
this.index = index;
this.color = color;
this.size = size;
}
}
}
[Rewind]
1. 어려웠던 점
2. 알게된 점
3. 개선 방안
728x90
'백준' 카테고리의 다른 글
[BOJ] BOJ_2178 미로 탐색 (JAVA) (0) | 2024.12.02 |
---|---|
[BOJ] BOJ_1753 최단경로 (JAVA) (0) | 2024.07.29 |
[BOJ] BOJ_31945 정육면체의 네 꼭짓점 (JAVA) (0) | 2024.07.19 |
[BOJ] BOJ_11659 구간 합 구하기 4 (JAVA) (0) | 2024.07.16 |
[BOJ] BOJ_25026 너의 평점은 (JAVA) (2) | 2024.07.16 |