๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 3758_KCPC

๋ฟŒ์•ผ._. 2024. 2. 8. 17:44

Silver II

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/3758)

< KCPC >

 

๋ฌธ์ œ ํ’€์ด 

 

๊ฐ ํŒ€๋งˆ๋‹ค ๊ฐ ๋ฌธ์ œ์˜ ์ตœ๊ณ  ์ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค. ๋˜ํ•œ, ๊ฐ ํŒ€๋งˆ๋‹ค ์ตœ์ข… ์ ์ˆ˜, ์ œ์ถœ ํšŸ์ˆ˜, ๋งˆ์ง€๋ง‰ ์ œ์ถœ ์‹œ๊ฐ„์„ ๊ตฌํ•œ ํ›„ ์ตœ์ข… ์ ์ˆ˜, ์ œ์ถœ ํšŸ์ˆ˜, ๋งˆ์ง€๋ง‰ ์ œ์ถœ ์‹œ๊ฐ„์„ ์šฐ์„ ์ˆœ์œ„๋กœ ๋‘๊ณ  ์ •๋ ฌํ•˜์—ฌ ๊ตฌํ•˜๋ ค๋Š” ํŒ€์˜ ์ˆœ์œ„๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 my solution (Java)

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

public class _3758_ { // KCPC

	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 t = Integer.parseInt(bf.readLine());

		for (int i = 0; i < t; i++) {
			st = new StringTokenizer(bf.readLine());

			int n = Integer.parseInt(st.nextToken());
			int k = Integer.parseInt(st.nextToken());
			int id = Integer.parseInt(st.nextToken()) - 1;
			int m = Integer.parseInt(st.nextToken());

			ArrayList<int[]> score = new ArrayList<>();
			ArrayList<int[]> info = new ArrayList<>();
			for (int j = 0; j < n; j++) {
				score.add(new int[k + 1]);
				info.add(new int[] { j, 0, 0, 0 }); // ํŒ€ ๋ฒˆํ˜ธ, ์ตœ์ข… ์ ์ˆ˜, ์ œ์ถœ ํšŸ์ˆ˜, ๋งˆ์ง€๋ง‰ ์ œ์ถœ ์‹œ๊ฐ„
			}

			for (int j = 0; j < m; j++) {
				st = new StringTokenizer(bf.readLine());

				int team = Integer.parseInt(st.nextToken()) - 1;
				int num = Integer.parseInt(st.nextToken());
				int s = Integer.parseInt(st.nextToken());

				if (score.get(team)[num] == 0 || score.get(team)[num] < s) {
					info.get(team)[1] = info.get(team)[1] - score.get(team)[num] + s;
					score.get(team)[num] = s;
				}
				info.get(team)[2] += 1;
				info.get(team)[3] = j;
			}

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

			for (int j = 0; j < n; j++) {
				if (info.get(j)[0] == id) {
					bw.write(j + 1 + "\n");
					break;
				}
			}
		}
		bw.flush();
	}
}
๋ณ€์ˆ˜)
t : ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค
n : ํŒ€์˜ ๊ฐœ์ˆ˜
k : ๋ฌธ์ œ์˜ ๊ฐœ์ˆ˜
id : ํŒ€์˜ ID
m : ๋กœ๊ทธ ์—”ํŠธ๋ฆฌ์˜ ๊ฐœ์ˆ˜
score : ๊ฐ ํŒ€์˜ ๊ฐ ๋ฌธ์ œ๋ณ„ ์ ์ˆ˜
info : ๊ฐ ํŒ€์˜ ํŒ€ ๋ฒˆํ˜ธ, ์ตœ์ข… ์ ์ˆ˜, ์ œ์ถœ ํšŸ์ˆ˜, ๋งˆ์ง€๋ง‰ ์ œ์ถœ ์‹œ๊ฐ„
team : ํŒ€ ID
num : ๋ฌธ์ œ ๋ฒˆํ˜ธ
s : ํš๋“ํ•œ ์ ์ˆ˜

 

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜๋งŒํผ ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

1) ํŒ€์˜ ๊ฐœ์ˆ˜, ๋ฌธ์ œ์˜ ๊ฐœ์ˆ˜, ํŒ€์˜ ID, ๋กœ๊ทธ ์—”ํŠธ๋ฆฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.

2) ๊ฐ ํŒ€์˜ ๋ฌธ์ œ๋ณ„ ์ ์ˆ˜์™€, ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด score, info๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

3) ๋กœ๊ทธ ์—”ํŠธ๋ฆฌ์˜ ๊ฐœ์ˆ˜๋งŒํผ ํŒ€ ID, ๋ฌธ์ œ ๋ฒˆํ˜ธ, ํš๋“ํ•œ ์ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๊ทธ ํŒ€์˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ ์ˆ˜๋ฅผ ์ตœ๊ณ  ์ ์ˆ˜๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์ œ์ถœ ํšŸ์ˆ˜, ๋งˆ์ง€๋ง‰ ์ œ์ถœ ์‹œ๊ฐ„ ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

4) ์ตœ์ข… ์ ์ˆ˜ ๋‚ด๋ฆผ์ฐจ์ˆœ, ์ œ์ถœ ํšŸ์ˆ˜ ์˜ค๋ฆ„์ฐจ์ˆœ, ๋งˆ์ง€๋ง‰ ์ œ์ถœ ์‹œ๊ฐ„ ์˜ค๋ฆ„์ฐจ์ˆœ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

5) ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ํŒ€ ID์˜ ์ˆœ์œ„๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.