λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Algorithm

[λ°±μ€€] 1417번: κ΅­νšŒμ˜μ› μ„ κ±°(μ™„μ „ 탐색)

by 주발2 2020. 3. 19.
λ°˜μ‘ν˜•

https://www.acmicpc.net/problem/1417

 

1417번: κ΅­νšŒμ˜μ› μ„ κ±°

첫째 쀄에 ν›„λ³΄μ˜ 수 N이 주어진닀. λ‘˜μ§Έ 쀄뢀터 μ°¨λ‘€λŒ€λ‘œ 기호 1λ²ˆμ„ 찍으렀고 ν•˜λŠ” μ‚¬λžŒμ˜ 수, 기호 2λ²ˆμ„ 찍으렀고 ν•˜λŠ” 수, μ΄λ ‡κ²Œ 총 N개의 쀄에 걸쳐 μž…λ ₯이 λ“€μ–΄μ˜¨λ‹€. N은 1,000보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄κ³ , λ“ν‘œμˆ˜λŠ” 1,000보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€.

www.acmicpc.net

μ½”λ“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(bf.readLine());	// 후보 수
		int dasom = Integer.parseInt(bf.readLine());	// λ‹€μ†œμ΄ μ°μœΌλ €λŠ” νˆ¬ν‘œ 수
		int[] arr = new int[N-1];	// 각 후보λ₯Ό μ°λŠ” νˆ¬ν‘œ 수
		for(int i=0; i<arr.length; i++)
			arr[i] = Integer.parseInt(bf.readLine());
		
		int min = 0;	// λ§€μˆ˜ν•΄μ•Όν•˜λŠ” μ‚¬λžŒμ˜ μ΅œμ†Ÿκ°’
		if(N == 1) {	// 후보가 μžμ‹  혼자인경우
			System.out.println("0");
			return;
		}
		
		while(true) {
			Arrays.sort(arr);
			boolean flag = true;
			int last = arr.length-1;	// κ°€μž₯ νˆ¬ν‘œκ°€ λ§Žμ€ ν›„λ³΄μ˜ 인덱슀
			// 후보쀑 κ°€μž₯ 높은 νˆ¬ν‘œλ₯Ό 받은 후보가 λ‹€μ†œμ΄μ˜ νˆ¬ν‘œμˆ˜ μ΄μƒμΈκ²½μš°
			if(dasom <= arr[arr.length-1]) {
				dasom ++;	// λ‹€μ†œμ΄ νˆ¬ν‘œ +1
				arr[last] --;	// κ°€μž₯ 높은 νˆ¬ν‘œλ₯Ό λ°›λŠ” 후보 -1 
				min ++;		// ν•œλͺ… 맀수
				flag = false;	// λ‹€μ†œμ΄κ°€ 당선이 λ˜μ§€ λͺ»ν–ˆμœΌλ―€λ‘œ false둜 μ„€μ •
			}
			if(flag)	// λ‹€μ†œμ΄λ³΄λ‹€ 높은 νˆ¬ν‘œμˆ˜κ°€ μ—†λŠ”κ²½μš°
				break;
		}
		System.out.println(min);
		bf.close();
	}

}

풀이

λ‹€λ₯Έ ν›„λ³΄μžμ˜ νˆ¬ν‘œμˆ˜λ₯Ό μžμ‹ μ˜ νˆ¬ν‘œμˆ˜λ‘œ 맀수λ₯Ό ν•΄μ„œ 당선이 λ˜μ•Όν•œλ‹€. 

접근방법 : μžμ‹ μ΄ 당선이 될 λ•Œ κΉŒμ§€ νˆ¬ν‘œμˆ˜κ°€ κ°€μž₯ 높은 ν›„λ³΄μžμ˜ νˆ¬ν‘œλ₯Ό ν•œμž₯μ”© λ§€μˆ˜ν•œλ‹€.

 

λ‹€μ†œμ΄μ˜ νˆ¬ν‘œμˆ˜ - 5

ν›„λ³΄μžμ˜ νˆ¬ν‘œμˆ˜ - [7, 4, 8, 10, 9[ 와 같이 μžˆμ„λ•Œ. -> [4, 7, 8, 9, 10]

ν›„λ³΄μžμ˜ νˆ¬ν‘œλ₯Ό μ •λ ¬ν•˜κ³ , ν›„λ³΄μžμ˜ νˆ¬ν‘œ 쀑 κ°€μž₯ 높은 νˆ¬ν‘œμˆ˜(10ν‘œ)λ₯Ό 가진 ν›„λ³΄μžλΆ€ν„° ν•œλͺ…μ”© 맀수λ₯Ό ν•œλ‹€.

 

λ‹€μŒμƒν™©μ€

λ‹€μ†œμ΄μ˜ νˆ¬ν‘œμˆ˜ - 6 [ν•œλͺ… 맀수]

ν›„λ³΄μžμ˜ νˆ¬ν‘œμˆ˜ - [4, 7, 8, 9, 9]

λ§ˆμ°¬κ°€μ§€ κ°€μž₯ 높은 νˆ¬ν‘œμˆ˜λ₯Ό 가진 ν›„λ³΄μžμ˜ νˆ¬ν‘œ ν•œμž₯을 λ§€μˆ˜ν•œλ‹€.

 

λ‹€μ†œμ΄μ˜ νˆ¬ν‘œμˆ˜ - 7 [두λͺ… 맀수]

ν›„λ³΄μžμ˜ νˆ¬ν‘œμˆ˜ - [4, 7, 8, 8, 9]

아직 λ‹€μ†œμ΄κ°€ 당선이 λ˜μ§€ λͺ»ν–ˆμœΌλ―€λ‘œ, μœ„μ™€ λ™μΌν•œ μž‘μ—…μ„ μ‹€ν–‰ν•œλ‹€.

 

λ‹€μ†œμ΄μ˜ νˆ¬ν‘œμˆ˜ - 8 [μ„Έλͺ… 맀수]

ν›„λ³΄μžμ˜ νˆ¬ν‘œμˆ˜ - [4, 7, 8, 8, 8]

아직도 당선이 λ˜μ§€ λͺ»ν–ˆκ³ , ν•œλͺ…λ§Œ 더 λ§€μˆ˜ν•˜λ©΄ 당선이 되기 λ•Œλ¬Έμ— 총 λ„€λͺ…을 λ§€μˆ˜ν•˜λ©΄ λœλ‹€.(μ΅œμ†Ÿκ°’)

 

 

λ°˜μ‘ν˜•

λŒ“κΈ€