1. ๋ฌธ์ ์ค๋ช
3~9๊น์ง ์๊ฐ ์ฃผ์ด์ง๋๋ฐ, ๊ทธ ์ฌ์ด ์ฌ์ด์ + ํน์ - ํน์ ๋ ์ ๋ถ์ด๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ, ์ด ํฉ์ 0์ผ๋ก ๋ง๋ค์ด๋ผ.
2. ํธ๋ ์๋ฆฌ
- ์ด๋ฐ ๋ฌธ์ ๋ ์ผ์ผํ char๋ก ๋ถํ ํ์ฌ ๊ฐ์ง๊ณ ์๋ ๊ฒ๋ณด๋ค, String์ผ๋ก ํ๋ฒ์ ๊ฐ์ง๊ณ ์๋ค๊ฐ StringTokenizer๋ก ํธ๋ ๊ฒ์ด ์ข๋ค๋ ๊ฒ์ ์์๋ค.
(1) DFS๋ฅผ ๋๋ฆฐ๋ค. (-> String์ ๋ค์ depth์ ๊ฐ์ ์ถ๊ฐํ๋ ์)
(2) ํ๋ฒ์ ๋ ์ ์ฌ์ด์ +๋ฅผ ๋ฃ๊ณ , ํ๋ฒ์ ๋ ์ ์ฌ์ด์ -๋ฅผ ๋ฃ๊ณ ํ๋ฒ์ ๋ ์ ์ฌ์ด์ ๊ณต๋ฐฑ์ ๋ฃ๊ณ ๊ฒฝ์ฐ๋ฅผ ์งํํ๋ค.
(3) ๋ง์ง๋ง ์๊น์ง String ๋ฌธ์์ด์ ์์ด๋ฉด, cal์ด๋ ์ด๋ฆ์ ํจ์์ ๋ฃ์ด์ ๊ณ์ฐํ๋ค.
(4) cal์ ์ญํ ์ ๋ค์๊ณผ ๊ฐ๋ค.
โ a. ๊ณต๋ฐฑ์ธ ๋ถ๋ถ์ ํฉ์ณ์ ํ๋์ ์๋ก ๋ง๋ ๋ค.
โ b. +๋ - ๋ผ๋ ๋ฌธ์๊ฐ ๋์ค๋ฉด ๋ค์ ์๋ฅผ Int๋ก ๋ฐ๊ฟ์ ์ง์ง ๋ํ๊ฑฐ๋ ๋บธ๋ค.
โ c. ์ด๋ ๊ฒ ํด์ ์ดํฉ์ด 0์ด๋ฉด true, ์๋๋ฉด false๋ฅผ ๋ด๋ฑ๋๋ค.
3. ์ฝ๋ ๋ถ์
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
/*
* 7490๋ฒ 0 ๋ง๋ค๊ธฐ
* */
public class Main {
static int N;
static ArrayList<String> ans;
static String [] op = {"+", "-", " "};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int tc = 0; tc < T; tc++) {
N = Integer.parseInt(br.readLine());
ans = new ArrayList<>();
dfs(1,"1");
// ์ ๋ ฌ ํ์
Collections.sort(ans);
for (String temp : ans){
System.out.println(temp);
}
System.out.println();
}
}
// 1. dfs -> depth ๋ง๋ค ์ฐ์ฐ์ + ๋ค์ ์ซ์ ์กฐํฉ์ ์ถ๊ฐํ์ฌ ๋ค์์ผ๋ก ๋์ด๊ฐ๋ค.
public static void dfs (int depth, String express) {
if(depth == N) {
// ์ฐ์ฐ์ + ๋ค์ ์ซ์ ์กฐํฉ์ด๋ผ์,
if(cal(express)){
ans.add(express);
};
return;
}
for (int i = 0; i < op.length; i++) {
dfs(depth+1, express+op[i]+(depth+1));
}
}
// 2. cal -> ๊ธฐ์ ์กฐ๊ฑด์์ ์ฐ์ด๋ ํจ์, [StringTokenizer]๋ก ์๋ผ์ ๋ณํํด์ ๊ณ์ฐํ๋ค.
public static boolean cal (String express) {
// 2-1) ๊ณต๋ฐฑ ์ ๊ฑฐ, ์ซ์ ๋ถ์ด๊ธฐ
String s = express.replaceAll(" ", "");
// 2-2) [StringTokenizer]๋ก ์๋ฅด๊ธฐ
StringTokenizer st = new StringTokenizer(s, "+|-", true);
int ans = Integer.parseInt(st.nextToken());
// 2-3) ์๋ฅธ ๋๋ก ๋ํด ๋ฃ๊ธฐ
while (st.hasMoreElements()) {
String temp = st.nextToken();
if(temp.equals("+")){
ans += Integer.parseInt(st.nextToken());
}
if(temp.equals("-")){
ans -= Integer.parseInt(st.nextToken());
}
}
return ans == 0;
}
}