Skip to content

Commit 1010fcd

Browse files
committed
[Gold V] Title: 0 만들기, Time: 20 ms, Memory: 69104 KB -BaekjoonHub
1 parent 32a8d4b commit 1010fcd

2 files changed

Lines changed: 86 additions & 0 deletions

File tree

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
let operaters = [" ", "+", "-",]
2+
3+
let t = Int(readLine()!)!
4+
5+
var answer = ""
6+
7+
func Backtracking(until n: Int, _ depth: Int = 1, _ ops: [String] = []) {
8+
if depth == n {
9+
var stack = [1]
10+
var current = 2
11+
var result = "\(1)"
12+
13+
for i in ops.indices {
14+
switch ops[i] {
15+
16+
case "+":
17+
stack.append(current)
18+
result.write("+\(current)")
19+
case "-":
20+
stack.append(current)
21+
result.write("-\(current)")
22+
default:
23+
let next = stack.removeLast() * 10 + current
24+
stack.append(next)
25+
result.write(" \(current)")
26+
}
27+
current += 1
28+
}
29+
current = stack.removeFirst()
30+
var i = 0
31+
for op in ops {
32+
if op == " " { continue }
33+
if op == "+" { current += stack[i] }
34+
if op == "-" { current -= stack[i] }
35+
i += 1
36+
}
37+
if current == 0 { answer.write("\(result)\n")}
38+
39+
return
40+
}
41+
for op in operaters {
42+
Backtracking(until: n, depth + 1, ops + [op])
43+
}
44+
}
45+
46+
for _ in 0..<t {
47+
let n = Int(readLine()!)!
48+
Backtracking(until: n)
49+
answer.write("\n")
50+
}
51+
52+
print(answer)
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# [Gold V] 0 만들기 - 7490
2+
3+
[문제 링크](https://www.acmicpc.net/problem/7490)
4+
5+
### 성능 요약
6+
7+
메모리: 69104 KB, 시간: 20 ms
8+
9+
### 분류
10+
11+
구현, 문자열, 브루트포스 알고리즘, 백트래킹
12+
13+
### 제출 일자
14+
15+
2025년 7월 7일 11:51:48
16+
17+
### 문제 설명
18+
19+
<p>1부터 N까지의 수를 오름차순으로 쓴 수열 1 2 3 ... N을 생각하자.</p>
20+
21+
<p>그리고 '+'나 '-', 또는 ' '(공백)을 숫자 사이에 삽입하자(+는 더하기, -는 빼기, 공백은 숫자를 이어 붙이는 것을 뜻한다). 이렇게 만든 수식의 값을 계산하고 그 결과가 0이 될 수 있는지를 살피자.</p>
22+
23+
<p>N이 주어졌을 때 수식의 결과가 0이 되는 모든 수식을 찾는 프로그램을 작성하라.</p>
24+
25+
### 입력
26+
27+
<p>첫 번째 줄에 테스트 케이스의 개수가 주어진다(<10).</p>
28+
29+
<p>각 테스트 케이스엔 자연수 N이 주어진다(3 <= N <= 9).</p>
30+
31+
### 출력
32+
33+
<p>각 테스트 케이스에 대해 ASCII 순서에 따라 결과가 0이 되는 모든 수식을 출력한다. 각 테스트 케이스의 결과는 한 줄을 띄워 구분한다.</p>
34+

0 commit comments

Comments
 (0)