Skip to content

Commit d9acf3c

Browse files
committed
[Silver V] Title: 막대기, Time: 8 ms, Memory: 69100 KB -BaekjoonHub
1 parent 0543c6f commit d9acf3c

2 files changed

Lines changed: 55 additions & 0 deletions

File tree

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# [Silver V] 막대기 - 1094
2+
3+
[문제 링크](https://www.acmicpc.net/problem/1094)
4+
5+
### 성능 요약
6+
7+
메모리: 69100 KB, 시간: 8 ms
8+
9+
### 분류
10+
11+
비트마스킹, 수학
12+
13+
### 제출 일자
14+
15+
2025년 1월 3일 21:41:29
16+
17+
### 문제 설명
18+
19+
<p>지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대를 만들려고 한다.</p>
20+
21+
<p>막대를 자르는 가장 쉬운 방법은 절반으로 자르는 것이다. 지민이는 아래와 같은 과정을 거쳐서 막대를 자르려고 한다.</p>
22+
23+
<ol>
24+
<li>지민이가 가지고 있는 막대의 길이를 모두 더한다. 처음에는 64cm 막대 하나만 가지고 있다. 이때, 합이 X보다 크다면, 아래와 같은 과정을 반복한다.
25+
<ol>
26+
<li>가지고 있는 막대 중 길이가 가장 짧은 것을 절반으로 자른다.</li>
27+
<li>만약, 위에서 자른 막대의 절반 중 하나를 버리고 남아있는 막대의 길이의 합이 X보다 크거나 같다면, 위에서 자른 막대의 절반 중 하나를 버린다.</li>
28+
</ol>
29+
</li>
30+
<li>이제, 남아있는 모든 막대를 풀로 붙여서 Xcm를 만든다.</li>
31+
</ol>
32+
33+
<p>X가 주어졌을 때, 위의 과정을 거친다면, 몇 개의 막대를 풀로 붙여서 Xcm를 만들 수 있는지 구하는 프로그램을 작성하시오. </p>
34+
35+
### 입력
36+
37+
<p>첫째 줄에 X가 주어진다. X는 64보다 작거나 같은 자연수이다.</p>
38+
39+
### 출력
40+
41+
<p>문제의 과정을 거친다면, 몇 개의 막대를 풀로 붙여서 Xcm를 만들 수 있는지 출력한다.</p>
42+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
let x = Int(readLine()!)!
2+
var sticks: [Int] = [64]
3+
while sticks.reduce(0,+) > x {
4+
let shortStick = sticks.popLast()!
5+
let halfStick = shortStick/2
6+
if sticks.reduce(0,+) + halfStick >= x {
7+
sticks.append(halfStick)
8+
continue
9+
}
10+
sticks.append(halfStick)
11+
sticks.append(halfStick)
12+
}
13+
print(sticks.count)

0 commit comments

Comments
 (0)