2020. 8. 17. 18:01ใ์นดํ ๊ณ ๋ฆฌ ์์
์ด ๋ฌธ์ ๋ DFS์ Backtracking์ ๊ตฌํํ๋ฉด ํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
์ด๋ฌํ ์์ด๋์ด๋ ๋ถ๋ฑํธ๋ผ๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฐ์ด ๋ฐ๋ ์ ์๋ค๋ ์ ๊ณผ, ์ ํ๋ ์ซ์๋ ๋ชจ๋ ๋ฌ๋ผ์ผ ํ๋ค๋ ๋ถ๋ถ์์ ์ป๊ฒ ๋์๋ค. ์กฐ๊ฑด์ ๋ถํฉํ์ฌ ์์ฑ๋ ์ซ์๋ค์ ์ฐจ๋ก๋๋ก ArrayList ๋ฐฐ์ด์ ๋ค์ด๊ฐ๊ฒ ๋๊ณ , ๋ฐฑํธ๋ํน์ ์ด์ฉํ๊ธฐ์ ๋ฐฉ๋ฌธ๋์ง ์์ ์ซ์๋ก ์ฒ์๋ถํฐ ๋ค์ ํ์ฉํ ์ ์๋ค.
class Main {
static ArrayList<String> abc = new ArrayList<>(); // ์์ฑ๋ ์ซ์๋ฅผ ๋ด์ ๊ณต๊ฐ
static boolean checked = new boolean[10]; // ๋ฐฉ๋ฌธ ์ฌ๋ถ
static String str; // ์ถ๊ฐ๋ ๋ฌธ์
static String [] map; // ๋ถ๋ฑํธ๋ฅผ ๋ด์ ๋ฌธ์์ด ๋ฐฐ์ด
static int k;
main ํจ์
{
Scanner sc = new Scanner(System.in);
k = sc.nextInt();
for(int i =0 ;i <k; i++) {
map[i] = sc.next();
}
for(int i =0; i<=9; i++) {
checked[i] = true;
dfs(i, 0, i+ ""); // 0๋ถํฐ 9๊น์ง์ ๋ฌธ์
}
}
static void dfs(int i, int cnt, String str)
{
if(cnt==k) {
abc.add(str); // ์์ฑ๋ ๋ฌธ์๋ฅผ abc์ ์ ์ฅ.
}else {
for(int j=0; j<=9; j++) {
if(!checked)
{
if(map[cnt].equals(">"))
{
if(i <=j)
{
continue; // ๊ณ์ j๋ฅผ ์ฆ๊ฐ์ํจ ํ ๋ฐฑํธ๋ํน์ผ๋ก or ๊ทธ๋ฅ ๋ฐฉ๋ฌธ
}
}else
{
if(i>=j) // j์ฆ๊ฐ ํ ๋ฐฉ๋ฌธ or ๊ทธ๋ฅ ๋ฐฉ๋ฌธ
{
continue;
}
}
visited[j] = true;
dfs(j, cnt+1, str+j);
}
}
}
visited[i] = false; //๋ฐฑํธ๋ํน
}
}