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

[BOJ] 1094 ๋ง‰๋Œ€๊ธฐ - Java

category Algorithm/BOJ 2022. 10. 29. 18:39

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

 

1094๋ฒˆ: ๋ง‰๋Œ€๊ธฐ

์ง€๋ฏผ์ด๋Š” ๊ธธ์ด๊ฐ€ 64cm์ธ ๋ง‰๋Œ€๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์–ด๋Š ๋‚ , ๊ทธ๋Š” ๊ธธ์ด๊ฐ€ Xcm์ธ ๋ง‰๋Œ€๊ฐ€ ๊ฐ€์ง€๊ณ  ์‹ถ์–ด์กŒ๋‹ค. ์ง€๋ฏผ์ด๋Š” ์›๋ž˜ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๋ง‰๋Œ€๋ฅผ ๋” ์ž‘์€ ๋ง‰๋Œ€๋กœ ์ž๋ฅธ๋‹ค์Œ์—, ํ’€๋กœ ๋ถ™์—ฌ์„œ ๊ธธ์ด๊ฐ€ Xcm์ธ ๋ง‰๋Œ€

www.acmicpc.net

 


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

64cm ๋ง‰๋Œ€๊ธฐ๋ฅผ Xcm๋กœ ๋งŒ๋“œ๋ ค๊ณ  ํ•œ๋‹ค. 

1. ๊ธธ์ด๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋ง‰๋Œ€๊ธฐ๋ฅผ ์ด๋“ฑ๋ถ„ํ–ˆ์„ ๋•Œ, ์ด๋“ฑ๋ถ„๋œ ๋‘ ๋ง‰๋Œ€๊ธฐ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ œ์™ธํ•˜๊ณ , ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๋ง‰๋Œ€์˜ ๊ธธ์ด๊ฐ€

    X๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์ œ์™ธํ•œ ๊ฑธ ๋ฒ„๋ฆฐ๋‹ค.

    X๋ณด๋‹ค ์ž‘์œผ๋ฉด ๋ฒ„๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.

2. ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

์ด ๋ช‡ ๊ฐœ์˜ ๋ง‰๋Œ€๋กœ Xcm๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

2. ํ’€์ด

๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.1. ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ• - ์ž‘์€ ์ˆ˜๋ถ€ํ„ฐ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. - 64๋ฅผ ์šฐ์„ ์ˆœ์œ„ ํ์— ๋„ฃ๊ณ  ์‹œ์ž‘ํ•œ๋‹ค. ํ•˜๋‚˜์”ฉ pollํ•ด์„œ ์ด๋“ฑ๋ถ„ํ•ด๋ดค์„ ๋•Œ,    ์ด ํ•ฉ์ด X๋ณด๋‹ค ํฌ๋ฉด ๋‘ ๋ฒˆ offer ํ•ด์ฃผ๊ณ , ์ž‘์œผ๋ฉด ํ•œ ๋ฒˆ offer ํ•ด์ค€๋‹ค. - ์ด ํ•ฉ์ด X์™€ ๊ฐ™์œผ๋ฉด ๋๋‚˜๊ณ , ์ด๋“ฑ๋ถ„ํ•œ ๊ธธ์ด๊ฐ€ 1๋ณด๋‹ค ์ž‘์œผ๋ฉด ํ์—์„œ poll()ํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๊ณ  ๋๋‚œ๋‹ค.

 

2. ์ด์ง„์ˆ˜๋‹ต์€ X๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋งŒ๋“ค์—ˆ์„ ๋•Œ 1์˜ ๊ฐœ์ˆ˜์™€ ๊ฐ™๋‹ค.Integer.bitCount(X) ๋ฅผ ์ด์šฉํ•˜๋ฉด ํ•œ ์ค„๋กœ ๋๋‚œ๋‹ค.

Intger.bitCount( ์ˆ˜ ) => ์ˆ˜๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋งŒ๋“ค์—ˆ์„ ๋•Œ 1์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

3. ์ฝ”๋“œ

1) ์ง์ ‘ ์ˆ˜ํ–‰

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

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

public class ๋ง‰๋Œ€๊ธฐ {

	static int X, ans;
	static PriorityQueue<Integer> pq;
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());
		for (int tc = 1; tc<=T; tc++ ) {
			X = Integer.parseInt(br.readLine());
			pq = new PriorityQueue<>( (o1, o2) -> o1-o2 ); //์ˆซ์ž ์ž‘์€ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์•ผ ํ•จ
			
			ans = 0;
			solution();
			System.out.println("#"+tc+" "+ans);
		}
	}
	
	static void solution() {
		pq.offer(64);
		if (X == 64) {
			ans = 1;
			return;
		}
		while (true) {
			int cur = pq.poll();
			if (cur/2 < 1) break;
			
			int sum = cur/2;
			for (int num : pq) {
				sum += num;
			}
			if (sum == X) {
				pq.offer(cur/2);
				break;
			} else if (sum > X) {
				pq.offer(cur/2);
			} else if (sum < X) {
				pq.offer(cur/2);
				pq.offer(cur/2);
			}
		}
		ans = pq.size();
	}
}

2) ์ด์ง„์ˆ˜ ํ’€์ด

๋”๋ณด๊ธฐ

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

public class ๋ง‰๋Œ€๊ธฐ {

	static int X, ans;
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());
		for (int tc = 1; tc<=T; tc++ ) {
			X = Integer.parseInt(br.readLine());
			ans = Integer.bitCount(X);
			System.out.println("#"+tc+" "+ans);
		}
	}
}