๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 8978_VLAK

๋ฟŒ์•ผ._. 2025. 9. 25. 01:25
๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/8978)

< VLAK >

 

๋ฌธ์ œ ํ’€์ด 

 

1. ์•„์ง ์ž๋ฆฌ๊ฐ€ ๋‚จ์•„์žˆ๋Š” ๊ฐ์ฐจ๋“ค ์ค‘ ์ž์‹ ์˜ ์ด๋ฆ„๊ณผ ๊ฐ™์€ ์ฒซ ๊ธ€์ž๋ฅผ ๊ฐ€์ง„ ์Šน๊ฐ์ด ๊ฐ€์žฅ ์ ์€ ๊ฐ์ฐจ๋ฅผ ๊ณ ๋ฅธ๋‹ค.
2. ๊ทธ๋Ÿฐ ๊ฐ์ฐจ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด, ์ „์ฒด ์Šน๊ฐ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€ ๊ฐ์ฐจ๋ฅผ ๊ณ ๋ฅธ๋‹ค.
3. ๊ทธ๋ž˜๋„ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด, ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๊ฐ์ฐจ๋ฅผ ์„ ํƒํ•œ๋‹ค.

 

my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.StringTokenizer;
import java.io.InputStreamReader;

public class _8978_ { // VLAK

	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 = new StringTokenizer(bf.readLine());

		int n = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());

		int arr[] = new int[n];
		HashMap<Integer, HashMap<Character, Integer>> map = new HashMap<>();

		for (int i = 0; i < n; i++) {
			map.put(i, new HashMap<>());
		}

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

		for (int i = 0; i < p; i++) {
			char name = bf.readLine().charAt(0);
			int idx = -1, cnt = 0, sum = 0;

			for (int j = 0; j < n; j++) {
				if (arr[j] == k) {
					continue;
				}
				if (idx == -1) {
					idx = j;
					if (map.get(idx).containsKey(name)) {
						cnt = map.get(idx).get(name);
					}
					sum = arr[idx];
				} else {
					if (map.get(j).containsKey(name)) {
						if (cnt > map.get(j).get(name) || (cnt == map.get(j).get(name) && sum > arr[j])) {
							idx = j;
							sum = arr[j];
							cnt = map.get(j).get(name);
						}
					} else {
						if (cnt > 0 || (cnt == 0 && sum > arr[j])) {
							idx = j;
							sum = arr[j];
							cnt = 0;
						}
					}
				}

			}
			arr[idx] += 1;
			if (map.get(idx).containsKey(name)) {
				map.get(idx).put(name, map.get(idx).get(name) + 1);
			} else {
				map.get(idx).put(name, 1);
			}
		}

		for (int i = 0; i < n; i++) {
			bw.write(arr[i] + " ");
		}
		bw.flush();
	}
}
๋ณ€์ˆ˜)
n, k : ๊ฐ์ฐจ ์ˆ˜, ๊ฐ ๊ฐ์ฐจ์˜ ์ •์›
arr : ๊ฐ ๊ฐ์ฐจ์— ํƒ‘์Šนํ•œ ์Šน๊ฐ ์ˆ˜
map : ๊ฐ ๊ฐ์ฐจ์— ํƒ‘์Šนํ•œ ์Šน๊ฐ์˜ ์ด๋ฆ„ ์ฒซ ๊ธ€์ž์™€ ๊ทธ ์Šน๊ฐ ์ˆ˜
p : ํƒ‘์Šนํ•˜๋ ค๋Š” ์Šน๊ฐ ์ˆ˜
name : ์Šน๊ฐ ์ด๋ฆ„ ์ฒซ ๊ธ€์ž
idx, cnt, sum : ๊ฐ์ฐจ ๋ฒˆํ˜ธ, ๊ทธ ๊ฐ์ฐจ์— ์žˆ๋Š” ์Šน๊ฐ์˜ ์ด๋ฆ„ ์ฒซ ๊ธ€์ž ์Šน๊ฐ ์ˆ˜, ๊ทธ ๊ฐ์ฐจ์— ํƒ‘์Šนํ•œ ์Šน๊ฐ ์ˆ˜

 

๊ฐ์ฐจ ์ˆ˜์™€ ๊ฐ ๊ฐ์ฐจ์˜ ์ •์›์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ํƒ‘์Šนํ•˜๋ ค๋Š” ์Šน๊ฐ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๊ทธ ์ˆ˜๋งŒํผ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

1) ๊ฐ์ฐจ์— ์ •์›์ด ๋‹ค ์ฐผ๋‹ค๋ฉด ๋‹ค์Œ ๊ฐ์ฐจ๋ฅผ ์‚ดํŽด๋ณธ๋‹ค.

2) ๊ฐ์ฐจ์— ์ •์›์ด ๋‹ค ์ฐจ์ง€ ์•Š์•˜๋‹ค๋ฉด idx์™€ cnt, sum์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

3) ๊ฐ์ฐจ์— ๊ทธ ์Šน๊ฐ์˜ ์ฒซ ๊ธ€์ž๋ฅผ ๊ฐ€์ง„ ์Šน๊ฐ์ด ์žˆ๋‹ค๋ฉด -> ํ˜„์žฌ ๊ฐ’๋ณด๋‹ค ์ ์€ ๊ฐ์ฐจ์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์ ์€ ๊ฐ์ฐจ๋ผ๋ฉด ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. ๋˜ํ•œ, ํ˜„์žฌ ๊ฐ’๊ณผ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ์ฐจ๋ผ๋ฉด ์ „์ฒด ์Šน๊ฐ ์ˆ˜๋ฅผ ๋น„๊ตํ•ด ์ ์€ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

4) ๊ฐ์ฐจ์— ๊ทธ ์Šน๊ฐ์˜ ์ฒซ ๊ธ€์ž๋ฅผ ๊ฐ€์ง„ ์Šน๊ฐ์ด ์—†๋‹ค๋ฉด -> ํ˜„์žฌ ๊ฐ’๋ณด๋‹ค ์ ์€ ๊ฐ์ฐจ์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์ ์€ ๊ฐ์ฐจ๋ผ๋ฉด ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. ๋˜ํ•œ, ํ˜„์žฌ ๊ฐ’๊ณผ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ์ฐจ๋ผ๋ฉด ์ „์ฒด ์Šน๊ฐ ์ˆ˜๋ฅผ ๋น„๊ตํ•ด ์ ์€ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

5) ์ตœ์ข… ๊ตฌํ•œ ๊ฐ์ฐจ์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

์ตœ์ข… arr์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.



 

'๐ŸŒžAlgorithm > ๐Ÿ”ฅBaekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Baekjoon] 18206_Soft Passwords  (0) 2025.09.26
[Baekjoon] 31023_Hit Song  (0) 2025.09.24
[Baekjoon] 24571_Good Groups  (0) 2025.09.18
[Baekjoon] 11260_Cell Counting  (0) 2025.09.17
[Baekjoon] 11419_Olympic Parade  (0) 2025.09.15