🌞Algorithm/🔥Baekjoon

[Baekjoon] 23246_Sport Climbing Combined

뿌야._. 2024. 6. 12. 11:09

Silver V

문제(출처: https://www.acmicpc.net/problem/23246)

< Sport Climbing Combined >

 

문제 풀이 

 

순위의 곱과 합을 구한 후 ArrayList에 [등번호, 합산 접수, 곱한 점수] 배열 형태로 저장한다. 곱한 점수 기준으로 오름차순, 곱한 점수가 같다면 합산 점수 기준으로 오름차순, 합산 점수가 같다면 등번호 기준으로 오름차순으로 정렬한다.

 

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.StringTokenizer;

public class _23246_ { // Sport Climbing Combined

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;

		int n = Integer.parseInt(bf.readLine());

		ArrayList<int[]> list = new ArrayList<>();
		for (int i = 0; i < n; i++) {
			st = new StringTokenizer(bf.readLine());

			int num = Integer.parseInt(st.nextToken());

			int sum = 0;
			int score = 1;

			for (int j = 0; j < 3; j++) {
				int x = Integer.parseInt(st.nextToken());

				sum += x;
				score *= x;
			}
			list.add(new int[] { num, sum, score });
		}

		Collections.sort(list, new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				if (o1[2] == o2[2]) {
					if (o1[1] == o2[1]) {
						return o1[0] - o2[0];
					}
					return o1[1] - o2[1];
				}
				return o1[2] - o2[2];
			}
		});

		for (int i = 0; i < 3; i++) {
			bw.write(list.get(i)[0] + " ");
		}
		bw.flush();
	}
}
변수)
n : 선수의 명수
list : ArrayList <int []>
num : 등번호
sum : 합산 점수
score : 곱한 점수

 

선수의 명수를 입력받는다. 선수 수만큼 각 등번호와 순위를 입력받으면서 순위 합과 곱을 구해 ArrayList에 배열 형태로 저장한다. ArrayList를 곱한 점수 기준 오름차순으로, 곱한 점수가 같다면 합산 점수 기준 오름차순으로, 합산 점수가 같다면 등번호 기준 오름차순으로 정렬한다. 

 

최종 ArrayList의 0번째부터 2번째까지의 등번호를 출력한다.