Algorithm/๋ฐฑ์ค€

๋ฐฑ์ค€ 18513๋ฒˆ : ์ƒ˜ํ„ฐ

giraffe_ 2024. 1. 27. 15:36

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

 

18513๋ฒˆ: ์ƒ˜ํ„ฐ

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N๊ณผ K๊ฐ€ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N, K ≤ 100,000) ๋‘˜์งธ ์ค„์— N๊ฐœ์˜ ์ƒ˜ํ„ฐ์˜ ์œ„์น˜๊ฐ€ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ •์ˆ˜ ํ˜•ํƒœ๋กœ ์ฃผ์–ด์ง„๋‹ค. (-100,000,000 ≤ ์ƒ˜ํ„ฐ์˜ ์œ„์น˜ ≤

www.acmicpc.net

 

 

 

 

 

๋ฌธ์ œ

  • ์ผ์ง์„  ์ƒ์˜ ๊ณต๊ฐ„์— N๊ฐœ์˜ ์ƒ˜ํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, K์ฑ„์˜ ์ง‘์„ ์ง“๊ณ ์ž ํ•œ๋‹ค. ๋ชจ๋“  ์ƒ˜ํ„ฐ ๋ฐ ์ง‘์ด ์กด์žฌํ•˜๋Š” ์œ„์น˜๋Š” ํ•ญ์ƒ ์ •์ˆ˜ ํ˜•ํƒœ์ด๋‹ค.
  • ์ด๋•Œ ์ผ์ง์„  ์ƒ์˜ ๊ณต๊ฐ„์—์„œ N๊ฐœ์˜ ์ƒ˜ํ„ฐ ๋ฐ K์ฑ„์˜ ์ง‘๋“ค์€ ๋ชจ๋‘ ์„œ๋กœ ๋‹ค๋ฅธ ์œ„์น˜์— ์กด์žฌํ•œ๋‹ค.
  • K์ฑ„์˜ ์ง‘์„ ์ง€์„ ๋•Œ, ๊ฐ€๋Šฅํ•˜๋ฉด ์ƒ˜ํ„ฐ์˜ ์ฃผ๋ณ€์— ์ง‘๋“ค์„ ์ง€์–ด์„œ K์ฑ„์˜ ๋ชจ๋“  ์ง‘์— ๋Œ€ํ•œ ๋ถˆํ–‰๋„์˜ ํ•ฉ์ด ์ตœ์†Œ๊ฐ€ ๋˜๋„๋ก ์ง“๊ณ ์ž ํ•œ๋‹ค.
  • ๋ถˆํ–‰๋„๋ž€, ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ƒ˜ํ„ฐ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ(Distance)๋กœ ์ •์˜๋œ๋‹ค.
  • ๋ชจ๋“  ์ง‘์— ๋Œ€ํ•œ ๋ถˆํ–‰๋„์˜ ํ•ฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ถœ์ฒ˜ : https://www.acmicpc.net/problem/18513

 

 

์ œํ•œ์‚ฌํ•ญ

  • 1 ≤ N, K ≤ 100,000
  • 100,000,000 ≤ ์ƒ˜ํ„ฐ์˜ ์œ„์น˜ ≤ 100,000,000

 

 

 

 

 

ํ’€์ด

  • BFS ํƒ์ƒ‰

 ๋ถˆํ–‰๋„์˜ ํ•ฉ์ด ์ตœ์†Œ๊ฐ€ ๋˜๋ ค๋ฉด, ์ง‘๋“ค์„ ์ตœ๋Œ€ํ•œ ์ƒ˜ํ„ฐ์— ๊ฐ€๊น๊ฒŒ ์ง€์–ด์•ผ ํ•œ๋‹ค. ์ƒ˜ํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ +1์”ฉ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€์–ด์ง€๋ฏ€๋กœ, ๋ชจ๋“  ์ƒ˜ํ„ฐ์— ๋Œ€ํ•ด +1์”ฉ ์ง‘์˜ ์œ„์น˜๋ฅผ ์›€์ง์ด๋ฉฐ ์ง‘์„ ์ง€์–ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

 ํ์— ๋ชจ๋“  ์ง‘์˜ ์ขŒํ‘œ๋ฅผ ๋‹ด๊ณ , ํ์˜ ์‚ฌ์ด์ฆˆ๋งŒํผ ๋Š์–ด์„œ ํƒ์ƒ‰์„ ํ•˜๋„๋ก ํ•˜๋ฉด, ๊ฐ™์€ ๊ฑฐ๋ฆฌ ๋งŒํผ ๋Š์–ด์„œ ํƒ์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฑฐ๋ฆฌ์˜ ํ•ฉ์ธ ๋ถˆํ–‰๋„๋ฅผ ๊ฐ™์ด ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

  • ์ƒ˜ํ„ฐ๊ณผ ์ง‘์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€ ์ €์žฅ : Set

 ๋ชจ๋“  ์ƒ˜ํ„ฐ์™€ ๋ชจ๋“  ์ง‘์ด ์„œ๋กœ ๋‹ค๋ฅธ ์œ„์น˜์— ์กด์žฌํ•˜๋ฏ€๋กœ, ํƒ์ƒ‰์„ ํ•  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ์œ„์น˜์— ์ƒ˜ํ„ฐ๋‚˜ ์ง‘์ด ์žˆ๋Š”์ง€ ํ™•์ธ์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

๋ณดํ†ต ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์—์„œ visited๋ผ๋Š” booleanํ˜•์˜ ๋ฐฉ๋ฌธ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ๋ฐฉ๋ฌธ ์ฒดํฌ ๋ฐ ํ™•์ธ์„ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์ด ๋ฌธ์ œ์—์„œ๋Š” ์ƒ˜ํ„ฐ์˜ ์œ„์น˜์˜ ๋ฒ”์œ„๊ฐ€  -100,000,000  ~ 100,000,000 ์œผ๋กœ, ์ด๊ฒƒ์„ ๋ฐฐ์—ด๋กœ ์˜ฎ๊ฒจ ํ‘œํ˜„ํ•œ๋‹ค๋ฉด ๋ฌด๋ ค ์•ฝ 2์–ต๋งŒํผ์˜ ํฌ๊ธฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋„ˆ๋ฌด๋„ˆ๋ฌด ํฐ ์ˆซ์ž์ด๋‹ค.. ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚  ๊ฒƒ์ด๋‹ค!

 

 ์ง‘๊ณผ ์ƒ˜ํ„ฐ์˜ ๊ฐœ์ˆ˜๋Š” ์ตœ๋Œ€ 10๋งŒ์œผ๋กœ, ๋ฐฉ๋ฌธ ์ฒดํฌ์— 2์–ต๋งŒํผ์„ ๋‹ค ์“ฐ์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ Set์œผ๋กœ ๋ฐ”๊ฟ” ์ €์žฅํ•˜๊ณ , ํ•ด๋‹น ์œ„์น˜์— ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

 

 

 

 

์ฝ”๋“œ

package algorithm;

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

public class BOJ_์ƒ˜ํ„ฐ {
	static int[] dx = {-1, 1};

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		int N = Integer.parseInt(st.nextToken());
		int K = Integer.parseInt(st.nextToken());
		
		int[] arr = new int[N]; //์ƒ˜ํ„ฐ ์œ„์น˜ ์ €์žฅ
		
		st = new StringTokenizer(br.readLine(), " ");
		for(int i = 0; i < N; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
		
		System.out.println(bfs(arr, K));
	}

	public static long bfs(int[] arr, int k) {
		Queue<Integer> queue = new LinkedList<>(); //ํƒ์ƒ‰์„ ์œ„ํ•œ ํ
		HashSet<Integer> visited = new HashSet<>(); //์ง‘์ด ์žˆ๋Š”์ง€ ์ €์žฅ
		
		for(int water : arr) { //์ƒ˜ํ„ฐ ์œ„์น˜๋ฅผ ํ์— ๋„ฃ์Œ
			queue.add(water);
			visited.add(water);
		}
		
		int house = 0; //์ง€์€ ์ง‘์˜ ๊ฐœ์ˆ˜
		long sum = 0; //๋ถˆํ–‰๋„ ํ•ฉ
		int dist = 1; //๊ฑฐ๋ฆฌ
		
		while(!queue.isEmpty()) {
			int size = queue.size();
			for(int s = 0; s < size; s++) { //๊ฑฐ๋ฆฌ๋ณ„๋กœ ๋Š์–ด์„œ ํƒ์ƒ‰
				int x = queue.poll();
				
				for(int d = 0; d < 2; d++) {
					int nx = x + dx[d];
					
					if(!visited.contains(nx)) { //์ง‘์ด ์—†์Œ
						queue.add(nx);
						visited.add(nx);
						house++;
						sum += dist;
						
						if(house == k) return sum; //k๊ฐœ ๋งŒํผ ์ง‘ ์ง€์Œ
					}
				}
			}
			dist++; //๊ฑฐ๋ฆฌ ์ฆ๊ฐ€
		}
		return sum;
	}

}

 

 

 

 

 

 

๊ฒฐ๊ณผ

 

์œ„์— ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋Š” visited๋ฅผ 2์–ต ๊ฐœ์˜ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์—ˆ์„ ๊ฒฝ์šฐ๋กœ ์‹œํ—˜์‚ผ์•„ ๋Œ๋ ค๋ดค์„ ๋•Œ์ธ๋ฐ ์—ญ์‹œ ํ„ฐ์ง„๋‹ค.

 

 

 

 

 

๋ฐฐ์šด์ 

  • ์ขŒํ‘œ ๋ฒ”์œ„๊ฐ€ ๋„“์„ ๋•Œ๋Š” ๋ฐฐ์—ด ๋ง๊ณ  ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์“ฐ์ž