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);
}
}
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 12100 2048(Easy) - Java (0) | 2022.11.13 |
---|---|
[BOJ] 18430 ๋ฌด๊ธฐ๊ณตํ - Java (0) | 2022.11.08 |
[BOJ] 17471 ๊ฒ๋ฆฌ๋งจ๋๋ง - Java (1) | 2022.10.28 |
[BOJ] 17779 ๊ฒ๋ฆฌ๋งจ๋๋ง2 - Java (0) | 2022.10.27 |
[BOJ] 17140 ์ด์ฐจ์ ๋ฐฐ์ด๊ณผ ์ฐ์ฐ - Java (0) | 2022.10.27 |