๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 1449_์ˆ˜๋ฆฌ๊ณต ํ•ญ์Šน

๋ฟŒ์•ผ._. 2023. 9. 14. 13:53

Silver III

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

< ์ˆ˜๋ฆฌ๊ณต ํ•ญ์Šน >

 

๋ฌธ์ œ ํ’€์ด 

 

์šฐ์„ ์ˆœ์œ„ ํ์— ๋ฌผ์ด ์ƒˆ๋Š” ๊ณณ์˜ ์œ„์น˜์˜ ์ขŒ์šฐ 0.5 ๊ฐ„๊ฒฉ ์œ„์น˜๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ๊ฐ’์„ ๊บผ๋‚ด๋ฉฐ ํ…Œ์ดํ”„์˜ ๊ธธ์ด๋ฅผ ๋”ํ–ˆ์„ ๋•Œ ๋‹ค์Œ ๊ฐ’๊นŒ์ง€ ํ…Œ์ดํ”„๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ํŒ๋‹จํ•˜์—ฌ ํ…Œ์ดํ”„์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

 

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class _1449_ { // ์ˆ˜๋ฆฌ๊ณต ํ•ญ์Šน

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());

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

		st = new StringTokenizer(bf.readLine());

		PriorityQueue<Double> queue = new PriorityQueue<>();
		for (int i = 0; i < n; i++) {
			int x = Integer.parseInt(st.nextToken());
			queue.add(x - 0.5);
			queue.add(x + 0.5);
		}

		double temp = queue.poll();
		int result = 1;
		boolean flag = false;

		while (!queue.isEmpty()) {
			if (temp + l > queue.peek()) {
				queue.poll();
			} else if (!flag && temp + l == queue.peek()) {
				flag=true;
				queue.poll();
			} else {
				temp = queue.poll();
				result += 1;
				flag=false;
			}
		}

		System.out.println(result);
	}
}

 

Main

๋ณ€์ˆ˜)
n : ๋ฌผ์ด ์ƒˆ๋Š” ๊ณณ์˜ ๊ฐœ์ˆ˜
l : ํ…Œ์ดํ”„์˜ ๊ธธ์ด
queue : ์šฐ์„ ์ˆœ์œ„ ํ
temp : ์šฐ์„ ์ˆœ์œ„ ํ ๊ฐ’
result : ํ…Œ์ดํ”„์˜ ๊ฐœ์ˆ˜
flag : ํ…Œ์ดํ”„ ๊ฒฝ๊ณ„์„  ์œ„์น˜ ์—ฌ๋ถ€

 

- ๋ฌผ์ด ์ƒˆ๋Š” ๊ณณ์˜ ๊ฐœ์ˆ˜(n), ํ…Œ์ดํ”„์˜ ๊ธธ์ด(l) ์ž…๋ ฅ

- ๋ฌผ์ด ์ƒˆ๋Š” ๊ณณ์˜ ์œ„์น˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ขŒ์šฐ 0.5๋งŒํผ ๊ฐ„๊ฒฉ์„ ์ค€ ๊ฐ’์„ ์šฐ์„ ์ˆœ์œ„ ํ์— ์ €์žฅ

- ์ดˆ๊ธฐ ๊ฐ’์„ ์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ๊บผ๋ƒ„(temp)

- ์šฐ์„ ์ˆœ์œ„ ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

: ํ˜„์žฌ ์œ„์น˜ + ํ…Œ์ดํ”„ ๊ธธ์ด๊ฐ€ queue์˜ peek ๊ฐ’ ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ํ…Œ์ดํ”„ ํ•˜๋‚˜๋กœ ๋ฌผ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ queue.poll

: ํ˜„์žฌ ์œ„์น˜ + ํ…Œ์ดํ”„ ๊ธธ์ด๊ฐ€ qeuue์˜ peek ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋ฉฐ flag ๊ฐ’์ด false ๋ผ๋ฉด ์—ฌ๊ธฐ๊นŒ์ง€ ๋ฌผ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ flag๋ฅผ true ํ‘œ์‹œ ๋ฐ queue.poll

: ์œ„์˜ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ํ…Œ์ดํ”„๋กœ ๋ฌผ์„ ๋ง‰์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ temp ๊ฐ’ ๊ต์ฒด ๋ฐ ํ…Œ์ดํ”„ ๊ฐœ์ˆ˜ +1, flag ๊ฐ’์„ false๋กœ ์ดˆ๊ธฐํ™”

- ํ…Œ์ดํ”„์˜ ๊ฐœ์ˆ˜(reuslt) ์ถœ๋ ฅ

 

* ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด์—์„œ flag๋ฅผ ๋‘” ์ด์œ ๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ์–ด์ง„ ์˜ˆ์ œ์™€ ๊ฐ™์ด 3 2 1์ด ๋ฌผ์ด ์ƒˆ๋Š” ๊ณณ์œผ๋กœ ๋“ค์–ด์˜ค๊ณ  ํ…Œ์ดํ”„์˜ ๊ธธ์ด๊ฐ€ 1๋กœ ์ฃผ์–ด์ง„๋‹ค๋ฉด ์šฐ์„ ์ˆœ์œ„ ํ์— 0.5 1.5 1.5 2.5 2.5 3.5๊ฐ€ ์ €์žฅ๋  ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด์—์„œ flag๊ฐ€ ์—†๋‹ค๋ฉด temp๊ฐ€ 0.5์ผ ๋•Œ 1.5๊ฐ€ ๋‹ค poll ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ ๋‹ค์Œ temp ๊ฐ’์ด 2.5๊ฐ€ ๋˜๊ณ  ํ•„์š”ํ•œ ํ…Œ์ดํ”„์˜ ์ˆ˜๊ฐ€ 2๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด flag๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.