๋ฐฑ์ค€ ๋ถ€๋“ฑํ˜ธ ๋ฌธ์ œ (Java ๊ตฌํ˜„)

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; //๋ฐฑํŠธ๋ž˜ํ‚น

 

}

 

}