๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

https://swexpertacademy.com/main/code/userProblem/userProblemDetail.do?contestProbId=AYFofW8qpXYDFAR4 

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com


1. ๋ฌธ์ œ ์š”์•ฝ

N๊ฐœ์˜ ๋‚˜๋ฌด๊ฐ€ ์žˆ๊ณ  ๋ชจ๋“  ๋‚˜๋ฌด์˜ ํ‚ค๊ฐ€ ์ฒ˜์Œ ๊ฐ€์žฅ ํ‚ค ํฐ ๋‚˜๋ฌด์™€ ๊ฐ™์•„์ง€๋„๋ก ํ•˜๋Š” ์ตœ์†Œ ์ผ์ž๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

ํ™€์ˆ˜ ์ผ์€ 1๋งŒํผ, ์ง์ˆ˜ ์ผ์€ 2๋งŒํผ ์ž๋ผ๋ฉฐ ํ•˜๋ฃจ์— ์ž๋ผ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

2. ํ’€์ด

๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ์ด๋‹ค.

์ž…๋ ฅ๋ฐ›์„ ๋•Œ ๊ฐ€์žฅ ๋†’์€ ๋‚˜๋ฌด ํ‚ค๋ฅผ Math.max๋กœ ๊ฐฑ์‹ ํ•˜๋ฉด์„œ ๊ตฌํ•ด์ค€๋‹ค.

 

์ฒ˜์Œ์—๋Š” max์™€ ๊ฐ๊ฐ ๋‚˜๋ฌด์™€์˜ ์ฐจ์ด๋ฅผ ๋ชจ๋‘ ๋”ํ•ด์„œ ์ง์ˆ˜ ํ ์•ˆ์— ๋“ค์–ด๊ฐˆ ์ˆ˜์žˆ๋Š” ๋งŒํผ 2๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ  ํ™€์ˆ˜๋ฉด ํ™€์ˆ˜ ํ์— 1์„ ํ•˜๋‚˜ ๋„ฃ์–ด์ฃผ๊ณ  ์‹œ์ž‘ํ–ˆ๋‹ค. ์ด๋Ÿฌ๋ฉด ์ง์ˆ˜ํ์—๋Š” 2 ์—ฌ๋Ÿฌ ๊ฐœ, ํ™€์ˆ˜ ํ์—๋Š” 1 ํ•˜๋‚˜๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.

์ง์ˆ˜ ํ ์•ˆ์— ๋“ค์–ด์žˆ๋Š” 2๋ฅผ poll ํ•˜๊ณ  ํ™€์ˆ˜ ํ์— 1์„ ๋‘ ๋ฒˆ offer ํ•ด์คŒ์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ

ํ™€์ˆ˜ ํ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ง์ˆ˜ ํ ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์•„์ง€๋ฉด ๋ฐ˜๋ณต์„ ๋ฉˆ์ถ˜๋‹ค.

ํ™€์ˆ˜ ํ ์‚ฌ์ด์ฆˆ๋Š” ํ™€์ˆ˜ ์ผ, ์ง์ˆ˜ ํ ์‚ฌ์ด์ฆˆ๋Š” ์ง์ˆ˜ ์ผ์„ ์˜๋ฏธํ•œ๋‹ค.

๊ทธ๋ž˜์„œ (์ง์ˆ˜ ํ์˜ ์‚ฌ์ด์ฆˆ + ํ™€์ˆ˜ ํ์˜ ์‚ฌ์ด์ฆˆ)๋ฅผ ๋‹ต์œผ๋กœ ๊ตฌํ–ˆ๋‹ค.

 

๊ทผ๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‚˜๋ฌด๊ฐ€ ๋†’์ด 1์”ฉ ๋‚จ์•˜์„ ๋•Œ, ์ง์ˆ˜์ผ์€ 2๊ฐ€ ๋”ํ•ด์ง€๋ฏ€๋กœ ์ง์ˆ˜ ์ผ์ž๋Š” ์‰ฌ์–ด์•ผ ํ•˜๋Š”๋ฐ

์ด ์กฐ๊ฑด์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜์„œ ์ฐจ์ด๋ฅผ ์ „๋ถ€ ๋”ํ•˜๊ณ  ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ž˜๋ชป๋˜์—ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๋ฐ”๊พผ ๋ฐฉ๋ฒ•์€, for๋ฌธ์œผ๋กœ ๋‚˜๋ฌด ํ•˜๋‚˜์”ฉ ๋ณผ ๋•Œ ํ‚ค๊ฐ€ ์ง์ˆ˜๋ฉด ์ง์ˆ˜ ํ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋งŒํผ 2๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ  ํ™€์ˆ˜๋ฉด ํ™€์ˆ˜ ํ์— 1์„ ๋„ฃ์–ด์คฌ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ง์ˆ˜ ํ์— 2 ์—ฌ๋Ÿฌ ๊ฐœ, ํ™€์ˆ˜ ํ์— 1 ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 

์ง์ˆ˜ ํ ์•ˆ์— ๋“ค์–ด์žˆ๋Š” 2๋ฅผ poll ํ•˜๊ณ  ํ™€์ˆ˜ ํ์— 1์„ ๋‘ ๋ฒˆ offer ํ•ด์คŒ์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ

ํ™€์ˆ˜ ํ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ง์ˆ˜ ํ ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์•„์ง€๋ฉด ๋ฐ˜๋ณต์„ ๋ฉˆ์ถ˜๋‹ค.

 

์ถ”๊ฐ€ํ•œ ์กฐ๊ฑด์€, ์ฒ˜์Œ๋ถ€ํ„ฐ ํ™€์ˆ˜ ํ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ง์ˆ˜ ํ ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ํด ๋•Œ,

((์ง์ˆ˜ ํ ์‚ฌ์ด์ฆˆ * 2) + (๋‚จ์€ ํ™€์ˆ˜ ํ ์‚ฌ์ด์ฆˆ + ๋‚จ์€ ํ™€์ˆ˜ ํ ์‚ฌ์ด์ฆˆ -1)) ์„ ๋‹ต์œผ๋กœ ๊ตฌํ–ˆ๋‹ค.

๋‚จ์€ ํ™€์ˆ˜ ํ ์‚ฌ์ด์ฆˆ๋Š” ํ™€์ˆ˜ ์ผ,

๋‚จ์€ ํ™€์ˆ˜ ํ ์‚ฌ์ด์ฆˆ-1์€ ์‰ฌ์–ด๊ฐ€๋Š” ์ง์ˆ˜ ์ผ์„ ์˜๋ฏธํ•œ๋‹ค.

 

๋ฌธ์ œ ํ’€์ด ๋ฐฉ๋ฒ•์€ ๊นœ์ฐgirl์˜ ๋„์›€์„ ๋ฐ›์•˜๋‹ค.

 

3. ์ฝ”๋“œ

๋”๋ณด๊ธฐ
package a22_10_25;

import java.util.*;
import java.io.*;

public class SW_14510_๋‚˜๋ฌด๋†’์ด {

	static Queue<Integer> even_q, odd_q;
	static int N, ans, max;
	static int[] tree;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		int T = Integer.parseInt(br.readLine());

		for (int tc = 1; tc <= T; tc++) {
			N = Integer.parseInt(br.readLine());
			tree = new int[N];
			max = 0;
			st = new StringTokenizer(br.readLine());
			for (int i = 0; i < N; i++) {
				tree[i] = Integer.parseInt(st.nextToken());
				max = Math.max(max, tree[i]);
			} // ์ž…๋ ฅ ๋

			ans = 0;
			solution();
			System.out.println("#" + tc + " " + ans);
		}
	}

	static void solution() {
		even_q = new ArrayDeque<>();
		odd_q = new ArrayDeque<>();

		for (int num = 0; num < N; num++) {
			if (tree[num] == max) continue;

			int n = max - tree[num];
			// ์ดˆ๊ธฐํ™”
			for (int i = 0; i < n / 2; i++) {
				even_q.offer(2);
			}
			if (n % 2 != 0) odd_q.offer(1);
		}

		// ๊ณ„์‚ฐ
		if (even_q.size() >= odd_q.size()) {
			while (true) {
				if (even_q.size() <= odd_q.size()) {
					ans = even_q.size() + odd_q.size();
					break;
				}
				even_q.poll();
				odd_q.offer(1);
				odd_q.offer(1);
			}
		} else if (even_q.size() < odd_q.size()) {
			ans += even_q.size() * 2;
			int gap = odd_q.size() - even_q.size();
			ans += gap + (gap - 1);
		}
	}
}