Skip to content

Commit ce97dcc

Browse files
committed
[Silver II] Title: 조각 케이크, Time: 104 ms, Memory: 14220 KB -BaekjoonHub
1 parent 3f2e854 commit ce97dcc

2 files changed

Lines changed: 96 additions & 0 deletions

File tree

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# [Silver II] 조각 케이크 - 25212
2+
3+
[문제 링크](https://www.acmicpc.net/problem/25212)
4+
5+
### 성능 요약
6+
7+
메모리: 14220 KB, 시간: 104 ms
8+
9+
### 분류
10+
11+
브루트포스 알고리즘, 수학
12+
13+
### 제출 일자
14+
15+
2025년 3월 18일 18:51:32
16+
17+
### 문제 설명
18+
19+
<p>안즈는 생일선물로 조각 케이크를 잔뜩 받았다.</p>
20+
21+
<p style="text-align: center;"><img alt="" src="https://upload.acmicpc.net/0613981b-a050-49d6-a64c-642022bc0ccd/-/preview/" style="height: 278px; width: 400px;"></p>
22+
23+
<p>케이크를 먹고 행복해하던 안즈는, 남은 케이크를 정리해 냉장고에 넣는 귀찮은 일을 해야 한다는 사실을 깨닫고 말았다.</p>
24+
25+
<p>결국 안즈는 케이크를 정리하는 좋은 방법을 알아냈다. 남은 조각 케이크들을 모아 케이크 한 판으로 만들어 버리는 것이다! 조각 케이크들의 크기의 합이 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mfrac><mjx-frac><mjx-num><mjx-nstrut></mjx-nstrut><mjx-mn class="mjx-n" size="s"><mjx-c class="mjx-c39"></mjx-c><mjx-c class="mjx-c39"></mjx-c></mjx-mn></mjx-num><mjx-dbox><mjx-dtable><mjx-line></mjx-line><mjx-row><mjx-den><mjx-dstrut></mjx-dstrut><mjx-mn class="mjx-n" size="s"><mjx-c class="mjx-c31"></mjx-c><mjx-c class="mjx-c30"></mjx-c><mjx-c class="mjx-c30"></mjx-c></mjx-mn></mjx-den></mjx-row></mjx-dtable></mjx-dbox></mjx-frac></mjx-mfrac></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mfrac><mn>99</mn><mn>100</mn></mfrac></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">\(\frac{99}{100}\)</span></mjx-container>판 이상 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mfrac><mjx-frac><mjx-num><mjx-nstrut></mjx-nstrut><mjx-mn class="mjx-n" size="s"><mjx-c class="mjx-c31"></mjx-c><mjx-c class="mjx-c30"></mjx-c><mjx-c class="mjx-c31"></mjx-c></mjx-mn></mjx-num><mjx-dbox><mjx-dtable><mjx-line></mjx-line><mjx-row><mjx-den><mjx-dstrut></mjx-dstrut><mjx-mn class="mjx-n" size="s"><mjx-c class="mjx-c31"></mjx-c><mjx-c class="mjx-c30"></mjx-c><mjx-c class="mjx-c30"></mjx-c></mjx-mn></mjx-den></mjx-row></mjx-dtable></mjx-dbox></mjx-frac></mjx-mfrac></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mfrac><mn>101</mn><mn>100</mn></mfrac></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">\(\frac{101}{100}\)</span></mjx-container>판 이하라면 모아서 케이크 한 판으로 만들 수 있다.</p>
26+
27+
<p>그런데 안즈는 문득, 조각 케이크들을 골라서 한 판으로 만들 수 있는 경우의 수가 몇 가지나 되는지 궁금해졌다.</p>
28+
29+
<p>하지만 그 순간 안즈는 매우 귀찮아졌기 때문에, 여러분에게 해결을 부탁했다.</p>
30+
31+
### 입력
32+
33+
<p>첫째 줄에 남은 조각 케이크의 개수 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D441 TEX-I"></mjx-c></mjx-mi></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>N</mi></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">\(N\)</span></mjx-container>이 주어진다.</p>
34+
35+
<p>둘째 줄에 각 조각 케이크의 크기를 나타내는 정수 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-msub><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D450 TEX-I"></mjx-c></mjx-mi><mjx-script style="vertical-align: -0.15em;"><mjx-mi class="mjx-i" size="s"><mjx-c class="mjx-c1D456 TEX-I"></mjx-c></mjx-mi></mjx-script></mjx-msub></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>c</mi><mi>i</mi></msub></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">\(c_i\)</span></mjx-container>가 공백으로 구분되어 주어진다. 이는 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D456 TEX-I"></mjx-c></mjx-mi></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mi>i</mi></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">\(i\)</span></mjx-container>번째 조각 케이크의 크기가 <mjx-container class="MathJax" jax="CHTML" style="font-size: 109%; position: relative;"><mjx-math class="MJX-TEX" aria-hidden="true"><mjx-mfrac><mjx-frac><mjx-num><mjx-nstrut></mjx-nstrut><mjx-mn class="mjx-n" size="s"><mjx-c class="mjx-c31"></mjx-c></mjx-mn></mjx-num><mjx-dbox><mjx-dtable><mjx-line></mjx-line><mjx-row><mjx-den><mjx-dstrut></mjx-dstrut><mjx-msub size="s"><mjx-mi class="mjx-i"><mjx-c class="mjx-c1D450 TEX-I"></mjx-c></mjx-mi><mjx-script style="vertical-align: -0.15em;"><mjx-mi class="mjx-i" size="s"><mjx-c class="mjx-c1D456 TEX-I"></mjx-c></mjx-mi></mjx-script></mjx-msub></mjx-den></mjx-row></mjx-dtable></mjx-dbox></mjx-frac></mjx-mfrac></mjx-math><mjx-assistive-mml unselectable="on" display="inline"><math xmlns="http://www.w3.org/1998/Math/MathML"><mfrac><mn>1</mn><msub><mi>c</mi><mi>i</mi></msub></mfrac></math></mjx-assistive-mml><span aria-hidden="true" class="no-mathjax mjx-copytext">\(\frac{1}{c_i}\)</span></mjx-container>판임을 뜻한다.</p>
36+
37+
### 출력
38+
39+
<p>조각 케이크들을 골랐을 때, 고른 조각 케이크를 <strong>모두</strong> 합쳐서 케이크 한 판으로 만들 수 있는 경우의 수를 출력한다.</p>
40+
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main{
5+
static int n, ans, lcd, MIN, MAX;
6+
static int[] cake;
7+
static StringTokenizer st;
8+
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
9+
public static void main(String[] args) throws Exception{
10+
preSetting();
11+
recur(0, 0);
12+
System.out.println(ans);
13+
}
14+
15+
static void recur(int cnt, long sum){
16+
if(cnt == n){
17+
if(MIN <= sum && sum <= MAX) ans++;
18+
return;
19+
}
20+
21+
recur(cnt + 1, sum);
22+
recur(cnt + 1, sum + cake[cnt]);
23+
}
24+
25+
static void preSetting() throws Exception{
26+
n = Integer.parseInt(br.readLine());
27+
cake = new int[n];
28+
29+
st = new StringTokenizer(br.readLine());
30+
31+
cake[0] = Integer.parseInt(st.nextToken());
32+
lcd = (100 * cake[0]) / gcd(100, cake[0]);
33+
34+
for(int i = 1; i < n; i++) {
35+
cake[i] = Integer.parseInt(st.nextToken());
36+
37+
lcd = (lcd * cake[i]) / gcd(lcd, cake[i]);
38+
}
39+
MIN = 99 * (lcd / 100);
40+
MAX = 101 * (lcd / 100);
41+
42+
43+
for(int i = 0; i < n; i++) cake[i] = lcd / cake[i];
44+
}
45+
46+
static int gcd(int x, int y){
47+
int tmp;
48+
while(x % y != 0){
49+
tmp = x % y;
50+
x = y;
51+
y = tmp;
52+
}
53+
54+
return y;
55+
}
56+
}

0 commit comments

Comments
 (0)