๋ฐ˜์‘ํ˜•
JuneBee
JuneBee
JuneBee
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (103)
    • ๐Ÿ‘” JOB (10)
      • ์ „ํ˜• ํ›„๊ธฐ (10)
    • ๐ŸŽฎ GAME (9)
      • ์ ค๋‹ค | ์™•๊ตญ์˜ ๋ˆˆ๋ฌผ ๊ฒŒ์ž„ ์ผ๊ธฐ (9)
    • ๐Ÿ““ STUDY (60)
      • JAVA (15)
      • TIL (2)
      • FASTCAMPUS (32)
      • ํ™˜๊ฒฝ์„ค์ • (2)
      • YOCTO (1)
      • OS (4)
      • ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ์ธ ์•ก์…˜ (2)
    • ๐ŸŽงDAILY (6)
    • ๐Ÿ‡ฉ๐Ÿ‡ช GERMAN (18)
      • ๋Œ€ํ•™์› ์ง€์› (3)
      • ์ง€์› ํ›„๊ธฐ (11)
      • ๋…์ผ์–ด ์‹œํ—˜ (4)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ์ผ์ƒ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ์ž๋ฃŒ๊ตฌ์กฐ
  • bruteforce
  • sort
  • ์œ ํ•™
  • ๋…์ผ์–ด
  • ํ”Œ๋ ˆ์ด์ผ๊ธฐ
  • telc
  • ํŒจ์ŠคํŠธ์บ ํผ์Šค
  • ์ ค๋‹ค
  • ์‹ธํ”ผ
  • ํŒจ์บ ์ฑŒ๋ฆฐ์ง€
  • ํŒจ์ŠคํŠธ์บ ํผ์Šคํ›„๊ธฐ
  • ์™•๋ˆˆ
  • ํฌ๋ฃจ์Šค์นผ
  • ์™•๊ตญ์˜๋ˆˆ๋ฌผ
  • ์ง์žฅ์ธ์ž๊ธฐ๊ณ„๋ฐœ
  • ๊ฒŒ์ž„์ผ๊ธฐ
  • ๋…์ผ์œ ํ•™
  • B1
  • ๋ชจํ—˜์ผ๊ธฐ
  • SSAFY
  • ์ทจ์—…์ค€๋น„
  • ์„์‚ฌ
  • ๋ฐฑํŠธ๋ž˜ํ‚น
  • ์ •๋ ฌ
  • ์ง์žฅ์ธ์ธ๊ฐ•
  • C/C++
  • ํ•œ๋ฒˆ์—๋๋‚ด๋Š”์ฝ”๋”ฉํ…Œ์ŠคํŠธ369JavaํŽธ์ดˆ๊ฒฉ์ฐจํŒจํ‚ค์ง€Online.
  • Java
  • ๋…์ผ

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
JuneBee

JuneBee

ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 10์ผ์ฐจ
๐Ÿ““ STUDY/FASTCAMPUS

ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 10์ผ์ฐจ

2021. 11. 10. 22:58
728x90
๋ฐ˜์‘ํ˜•

์‹œ์ฒญ ๋‚ ์งœ : 11/10/2021
์‹œ์ฒญ ๊ฐ•์˜ : ์–ด๋–ป๊ฒŒ๋“  ํ‘ผ๋‹ค. ์™„์ „ ํƒ์ƒ‰ (Brute Force) ์‘์šฉํŽธ

์˜ค๋Š˜์€ ์™„์ „ํƒ์ƒ‰ ๊ฐ•์˜ 2๋ฅผ ๋“ฃ๊ธฐ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๊ฒƒ์„ ์ค‘์‹ฌ์œผ๋กœ ํ•™์Šตํ–ˆ๋‹ค.

์—ฐ์‚ฐ์ž ๋ผ์›Œ๋„ฃ๊ธฐ https://www.acmicpc.net/problem/14888
๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ https://www.acmicpc.net/problem/1182
์•”ํ˜ธ ๋งŒ๋“ค๊ธฐ https://www.acmicpc.net/problem/1759

์œ„์˜ ์—ฐ์Šต๋ฌธ์ œ๋ฅผ ๋ชจ๋‘ dfs๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์—ˆ๋‹ค.

์—ฐ์‚ฐ์ž ๋ผ์›Œ๋„ฃ๊ธฐ

๋ฌด๋ ค ์‚ผ์„ฑ ๊ธฐ์ถœ๋ฌธ์ œ๋กœ ๋ถ„๋ฅ˜๋˜์–ด์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ๋งŒ ๋‚˜์˜ค๋ฉด ์–ผ๋งˆ๋‚˜ ํ–‰๋ณตํ• ๊นŒ..

DFS

private static void dfs(int depth , int calculated){ ... }
//main ํ•จ์ˆ˜:
dfs(1,nums[0]);

dfs ํ•จ์ˆ˜์— depth ์™€ ํ˜„์žฌ ๊ณ„์‚ฐ์ค‘์ธ int variable์„ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋„˜๊ฒจ ์žฌ๊ท€๋กœ ํ˜ธ์ถœํ•˜์˜€๋‹ค.

depth==N์—์„œ ๋ฉˆ์ถ”๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ depth๋ฅผ 0 ์ด์•„๋‹ˆ๋ผ 1๋กœ ์ฃผ์—ˆ๊ณ , ์ž…๋ ฅ๋ฐ›์€ ๋ฐฐ์—ด์˜ ๋งจ ์ฒ˜์Œ ์ˆซ์ž๋ฅผ ๋„˜๊ฒจ์ฃผ์—ˆ๋‹ค. (๋งŒ์•ฝ, 4 ๋ผ๋ฉด 4 "+" "3" ์ด ๋˜์–ด์•ผํ•จ -> ๋งจ ์ฒ˜์Œ ์ˆซ์ž๋Š” ํ•„์š”!)

 

Return ์กฐ๊ฑด

if(depth == N) {
	min = Math.min(calculated, min );
	max = Math.max(calculated, max);
	return;
}

for loop

์ฒ˜์Œ์—๋Š” ์—ฐ์‚ฐ์ž๊ฐ€ ์•„๋‹ˆ๋ผ, N ๋งŒํผ ๋Œ๋ ค์„œ ์—„์ฒญ๋‚œ ๋””๋ฒ„๊น…์„ ํ–ˆ๋‹ค.

for(int i = 0 ; i <4 ; i++) {//์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด +,-,*,/ ํ™•์ธ
	if(operator[i]>0) { //์—ฐ์‚ฐ์ž๊ฐ€ ๋‚จ์•„ ์žˆ์„ ๊ฒฝ์šฐ์—๋งŒ
		operator[i]--;//์‚ฌ์šฉ๋œ ์—ฐ์‚ฐ์ž pop off
		//dfs ํ˜ธ์ถœ
		operator[i]++;
	}
}

ํ•˜์ง€๋งŒ, operator๊ฐ€ ์‚ฌ์ด์ฆˆ๊ฐ€ 4๋กœ ์žกํ˜€์žˆ๊ณ ,

operator [0] = +์˜ ๊ฐœ์ˆ˜ , [1] = -์˜ ๊ฐœ์ˆ˜ , [2] = *์˜ ๊ฐœ์ˆ˜, [3] = /์˜ ๊ฐœ์ˆ˜

๋กœ ์ง€์ •ํ•ด๋†จ๋‹ค.

๋”ฐ๋ผ์„œ, ๋ฃจํ”„๋ฅผ 4๋งŒํผ ๋Œ๋ ค์•ผ ํ•˜๊ณ , ํ•ด๋‹น ์—ฐ์‚ฐ์ด ๋‚จ์•„์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ dfs๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ์—ˆ๋‹ค. ์ด๋•Œ, operator[i]--๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผ dfs๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ๋ฐฉ๊ธˆ ์‚ฌ์šฉํ•œ ์—ฐ์‚ฐ์ž๋ฅผ ์ค‘๋ณต ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—†์–ด์ง€๊ณ  ์žฌ๊ท€์—์„œ ๋Œ์•„์˜ค๋ฉด ๋‹ค์‹œ operator[i] ++ ๋ฅผ ํ•ด์ค˜์„œ ์ดˆ๊ธฐํ™”๋ฅผ ์‹œ์ผœ์•ผํ•œ๋‹ค.

dfs ์กฐ๊ฑด

if(i==0) dfs(depth+1 , nums[depth]+calculated);
else if(i==1) dfs(depth+1 , calculated - nums[depth]);
else if(i==2) dfs(depth+1 , calculated * nums[depth]);
else if(i==3) dfs(depth+1 , calculated / nums[depth]);

i = 0์ผ๋•Œ๋Š” + ์—ฐ์‚ฐ, 1์ผ๋•Œ๋Š” - ์—ฐ์‚ฐ , 2 ์ผ๋•Œ๋Š” * ์—ฐ์‚ฐ, 3 ์ผ๋•Œ๋Š” / ์—ฐ์‚ฐ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. (operator[i] ์˜ i ์ž„*)

dfs๋ฅผ ์žฌ๊ท€ํ˜ธ์ถœํ•  ๋•Œ, depth๋Š” 1 ๋”ํ•˜๊ณ , calculated์— ๋ฐฉ๊ธˆ ์—ฐ์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๊ฐ™์ด ๋ณด๋‚ด์„œ ๋‹ค์Œ๋ฒˆ ๊ณ„์‚ฐ๋•Œ์—๋„ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ๋‹ค.

์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ

package Backtracking;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/**
 * @author June Park
 * @date 11/10/2021
 * dfs ๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฐ์‚ฐ์ž +-* /์— ๋Œ€ํ•ด ๋‚จ์€ ์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น์—ฐ์‚ฐ์ฒ˜๋ฆฌ ํ›„ dfs๋กœ ๋ณด๋‚ธ๋‹ค
 * */
public class BOJ_14888_์—ฐ์‚ฐ์ž๋ผ์›Œ๋„ฃ๊ธฐ {
static int N , nums[],operator[];
static int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		StringTokenizer st = new StringTokenizer(br.readLine());
		nums = new int[N];
		
		operator = new int[4];//+ - * /
		for(int i = 0 ; i < N ; i++) {
			nums[i] = Integer.parseInt(st.nextToken());
		}
		st = new StringTokenizer(br.readLine());
		for(int i = 0 ; i < 4 ; i++) {
			operator[i]=Integer.parseInt(st.nextToken());
		}//end of input
		
		dfs(1, nums[0]);
		System.out.println(max);
		System.out.println(min);
		
	}
	private static void dfs(int depth , int calculated) {
		if(depth == N) {
			//System.out.println(calculated);
			min = Math.min(calculated, min );
			max = Math.max(calculated, max);
			return;
		}
		for(int i = 0 ; i <4 ; i++) {//์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด +,-,*,/ ํ™•์ธ
			if(operator[i]>0) {		 //์—ฐ์‚ฐ์ž๊ฐ€ ๋‚จ์•„ ์žˆ์„ ๊ฒฝ์šฐ์—๋งŒ
			operator[i]--;			 //์‚ฌ์šฉ๋œ ์—ฐ์‚ฐ์ž pop off
			if(i==0) dfs(depth+1 , nums[depth]+calculated);
			else if(i==1) dfs(depth+1 , calculated - nums[depth]);
			else if(i==2) dfs(depth+1 , calculated * nums[depth]);
			else if(i==3) dfs(depth+1 , calculated / nums[depth]);
			operator[i]++;
			}
		}
		
		
	}

	
	

}

๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ

DFS ์ƒ์„ฑ

private static void dfs(int depth, int sum){...}
//main ํ•จ์ˆ˜:
dfs(0,0); //depth ์™€ sum

depth ์™€ ํ˜„์žฌ dfs์—ฐ์‚ฐ์˜ ํ•ฉ์„ ์ €์žฅํ•  ๋ณ€์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ฃผ์—ˆ๋‹ค.

Return ์กฐ๊ฑด

if(depth == N) { //๋๊นŒ์ง€ ์ฐพ์•˜๋‹ค๋ฉด,
	if(tempSum==S) {count++;}
	tempSum = 0;//์ดˆ๊ธฐํ™”
	return;
}

๋งŒ์•ฝ, depth ๊ฐ€ N ์™€ ๊ฐ™๋‹ค๋ฉด -> ๋ชจ๋“  ์›์†Œ๋ฅผ ๋‘˜๋Ÿฌ๋ณด์•˜๋‹จ ์†Œ๋ฆฌ๋‹ค.

๋”ฐ๋ผ์„œ, ์—ฌํƒœ๊นŒ์ง€์˜ ํ•ฉ์ด ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ target Sum (S)์™€ ๊ฐ™์€์ง€ ํ™•์ธํ•˜๊ณ  ๊ฐ™๋‹ค๋ฉด, count ๋ฅผ ๋”ํ•ด์ค€๋‹ค.

DFS ์กฐ๊ฑด

//๋ถ€๋ถ„์ˆ˜์—ด. ์ง€๊ธˆ ์œ„์น˜์˜ ์›์†Œ๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ํ•˜์ง€ ์•Š๋Š”๋‹ค
dfs(depth+1 , nums[depth]+tempSum);//์„ ํƒํ•จ	
dfs(depth+1 , tempSum);	//์„ ํƒ์•ˆํ•จ

๋ถ€๋ถ„์ง‘ํ•ฉ์€ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์„ ํƒํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋กœ ํŠธ๋ฆฌ๋ฅผ ์ด๋ฃฌ๋‹ค.

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : ์ถค์ถ”๋Š” ๊ฐœ๋ฐœ์ž - JavaScript๋กœ ๋ฉฑ์ง‘ํ•ฉ(PoswerSet) ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ ๊ตฌํ•˜๊ธฐ

์œ„ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด, ์ข€ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์•„์„œ ๊ฐ€์ ธ์™”๋‹ค.

ํ˜„์žฌ ๋ฌธ์ œ์—์„œ, ์„ ํƒํ•  ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ์ˆซ์ž๋ฅผ ๋”ํ•˜๊ณ  ์„ ํƒํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ์กด ์ˆซ์ž๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋„˜๊ธด๋‹ค.

Count ์ฒ˜๋ฆฌ

count = S==0? -1 : 0;

์œ„ dfs ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ์ „, ์œ„ ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๋‚ด ๋””๋ฒ„๊น… ์‹œ๊ฐ„์„ ์žก์•„๋จน์€ ์ฝ”๋“œ์ด๋‹ค...

๋งŒ์•ฝ, ์ฃผ์–ด์ง„ S๊ฐ€ 0 ์ธ ๊ฒฝ์šฐ๋Š” ๊ณต์ง‘ํ•ฉ์ธ ๊ฒฝ์šฐ์˜ ํ•ฉ๋„ 0 ์ด๊ธฐ ๋•Œ๋ฌธ์— count๊ฐ€ ํ•˜๋‚˜ ๋” ๋Š˜๊ฒŒ ๋œ๋‹ค. ์ด๊ฒŒ ๋ฐ”๋กœ ํ—ˆ์œ„๋งค๋ฌผ..

๋”ฐ๋ผ์„œ, ๋งŒ์•ฝ S๊ฐ€ 0์ด๋ผ๋ฉด -1๋ถ€ํ„ฐ ์‹œ์ž‘, ์•„๋‹ˆ๋ผ๋ฉด 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ์ฃผ๋ฉด ์ •์ƒ์ ์œผ๋กœ ๊ณต์ง‘ํ•ฉ์„ ์ œ์™ธํ•˜๊ณ  ์นด์šดํŠธํ•˜๊ฒŒ ๋œ๋‹ค.

์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ

package Backtracking;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/**
 * @author June Park
 * @date 11/10/2021
 * ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ :dfs ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋จผ์ € ๋ถ€๋ถ„ ์ง‘ํ•ฉ์„ ๊ตฌํ•œ ํ›„, 
 * return statement ์—์„œ ํ•ฉ์ด ๊ฐ™์€์ง€ ํ™•์ธํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์—ˆ๋‹ค.
*/
public class BOJ_1182_๋ถ€๋ถ„์ˆ˜์—ด์˜ํ•ฉ {
	static int N, S , nums[], count;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st= new StringTokenizer(br.readLine());
		N = Integer.parseInt(st.nextToken());
		S = Integer.parseInt(st.nextToken());
		nums= new int[N];

		st = new StringTokenizer(br.readLine());
		for(int i = 0 ; i < N ; i++) {nums[i]=Integer.parseInt(st.nextToken());}
		
		count = S==0? -1 : 0; //ํ•ฉ์ด sum ์ด๋ฉด count ++ํ•ด์ฃผ๊ณ , ๋งŒ์•ฝ S =-0 ์ด๋ฉด ๊ณต์ง‘ํ•ฉ์˜ ํ•ฉ๋„ 0์ด๊ธฐ ๋•Œ๋ฌธ์— 1๋นผ์ค€๋‹ค
		dfs(0,0); //depth ์™€ sum
		System.out.println(count);

	}
	
	/**
	 * ๋ถ€๋ถ„ ์ง‘ํ•ฉ : ์„ ํƒํ•˜๊ฑฐ๋‚˜, ์„ ํƒํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ 
	 * ์œ„ ํ˜•ํƒœ์˜ ํŠธ๋ฆฌ๋ฅผ ์ด๋ฃฌ๋‹ค.
	 * ์ฆ‰, dfs ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ํ˜„์žฌ ์›์†Œ๋ฅผ ์„ ํƒํ•œ(๋”ํ•œ) ์žฌ๊ท€ํ˜ธ์ถœ๊ณผ ์„ ํƒํ•˜์ง€ ์•Š์€(๋”ํ•˜์ง€ ์•Š์€) ์žฌ๊ท€ ํ˜ธ์ถœ์„ ํ•œ๋‹ค.
	 * */
	private static void dfs(int depth, int tempSum) {
		if(depth == N) { //๋๊นŒ์ง€ ์ฐพ์•˜๋‹ค๋ฉด,
			if(tempSum==S) {
				count++;
			}
			tempSum = 0;
			return;
		}
		//๋ถ€๋ถ„์ˆ˜์—ด. ์ง€๊ธˆ ์œ„์น˜์˜ ์›์†Œ๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ํ•˜์ง€ ์•Š๋Š”๋‹ค
		dfs(depth+1 , nums[depth]+tempSum);//์„ ํƒํ•จ
		dfs(depth+1 , tempSum);	//์„ ํƒ์•ˆํ•จ

	}

}

 

์•”ํ˜ธ๋งŒ๋“ค๊ธฐ

๋†€๋ž๊ฒŒ๋„ ๋ช‡๋‹ฌ ์ „์— ํ’€์–ด๋ณธ์ ์ด ์žˆ๋Š” ๋ฌธ์ œ๋‹ค. ๊ทธ๋•Œ๋Š” dfs ๊ฐ€ ๋ญ”์ง€๋„ ๋ชจ๋ฅด๊ณ  ํ’€์—ˆ๋Š”๋ฐ ๋‹ค์‹œ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ ์ง€๊ธˆ๋ณด๋‹ค ํ›จ์”ฌ ์ž˜ํ–ˆ๋˜๊ฒƒ๊ฐ™๋‹ค...

์ด๋ฒˆ์—๋Š” ์ „ํ˜•์ ์ธ dfs๋กœ ํ’€์–ด๋ณด์•˜๋‹ค.

Arrays.sort

Arrays.sort(input); //sort ํ•˜๋ฉด, ํ˜„์žฌ๊ฐ€ ์ด์ „๋ณด๋‹ค ์ž‘์€๊ฑฐ ๊ณ ๋ฏผํ•  ํ•„์š” x

์ด๋ถ€๋ถ„ ๋•Œ๋ฌธ์— ํ•œ์ฐธ ํ•ด๋งธ๋‹ค.. ๊ณผ๊ฑฐ์˜ ๋‚˜๋Š” ๋†€๋ž๊ฒŒ๋„ ์ด ๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž ์ด ์ƒ๊ฐ์„ ํ–ˆ๋‚˜๋ณด๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ ”๊ธฐ ๋•Œ๋ฌธ์— ex : ABCD ๊ฐ€๋Šฅ, XASD ๋ถˆ๊ฐ€๋Šฅ

Arrays.sort๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฏธ๋ฆฌ ์•ŒํŒŒ๋ฒณ ์ˆœ์œผ๋กœ ํƒ์ƒ‰ํ•  ๋ฌธ์ž ๋ฐฐ์—ด์„ ์ •๋ ฌํ•ด๋‘๋ฉด ๋ณ„๋„์˜ ์กฐ๊ฑด ์—†์ด๋„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

(ex : if(depth>0 && ์ด์ „๊ณ ๋ฅธ๋ฌธ์ž<์ž…๋ ฅ๋ฐ›์€๋ฌธ์ž๋ฐฐ์—ด[ํ˜„์žฌ์ธ๋ฑ์Šค])) 

DFS ์ƒ์„ฑ

private static void dfs(int depth, int index, char[] passwords){...}

 

Return ์กฐ๊ฑด

if(depth == L ) {
	int vowels=0 , consonants=0;
	for(char c : passwords) {
		if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') {vowels++;}
		else {consonants++;}
	}
	if(vowels>=1 & consonants>=2) {
		for(char c:passwords) {
			bw.write(c);
		}
		bw.write("\n");					
	}
	return;
}

๊นŠ์ด == length of password ๋ฉด,

1. ์กฐ๊ฑด์—์„œ ์ œ์‹œํ•œ ๋ชจ์Œ 1๊ฐœ์ด์ƒ๊ณผ ์ž์Œ 2๊ฐœ์ด์ƒ ์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  

2. ๋งŒ์กฑํ•˜๋ฉด ์ •๋‹ต ๋ฌธ์ž์—ด์— ์ถ”๊ฐ€ํ•œ๋‹ค (์†๋„๊ฐœ์„ ์„ ์œ„ํ•ด bw๋ฅผ ์ผ์ง€๋งŒ, System.out.print๋ฅผ ์จ๋„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋Š” ๋‚˜์ง€ ์•Š๋Š”๋‹ค)

DFS ์กฐ๊ฑด

//์ค‘๋ณต ์„ ํƒ ํ—ˆ์šฉ x - visited ๋ฐฐ์—ด ์‚ฌ์šฉ
for(int i = index ; i < C ; i++) { //indexํ™œ์šฉ ์ฑ…๊ฐˆํ”ผ
	if(visited[i])continue;
	visited[i] = true;
	passwords[depth] = input[i];
	dfs(depth+1 , i+1 , passwords);
	visited[i] = false;
}

 

ํŒจ์Šค์›Œ๋“œ ์ƒ์„ฑ ์‹œ, ์ค‘๋ณต๋œ ๋ฌธ์ž๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— visited ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

๋งŒ์•ฝ, ์ด๋ฏธ ์‚ฌ์šฉ๋œ ๋ฌธ์ž๋ผ๋ฉด continue, ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ผ๋‹จ ์ƒ์„ฑ์ค‘์ธ ํŒจ์Šค์›Œ๋“œ์— ๋ฌธ์ž๋ฅผ ๋‹ด๊ณ  ์žฌ๊ท€๋ฅผ ๋Œ๋ ค์„œ validation ์ฒดํฌ๋ฅผ ํ•˜๋„๋ก ํ•œ๋‹ค. ์žฌ๊ท€๋ฅผ ํƒ„ ํ›„์— return statement๋ฅผ ๋งŒ๋‚˜๋ฉด ๋‹ค์‹œ dfs(depth+1,i+1,passwords);์ง€์ ์— ๋Œ์•„์˜ค๊ฒŒ ๋˜๋Š”๋ฐ, ๋”ฐ๋ผ์„œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ œ์‹œ์ผœ์ค˜์•ผ ๋‹ค์Œ๋ฒˆ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ

package Backtracking;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

/**
 *@ author June Park
 *@ date 11/10/2021
 *1. ์˜ค๋ฆ„ ์ฐจ์ˆœ : Arrays.sort()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, dfs์—์„œ ์ถ”๊ฐ€ ์—ฐ์‚ฐ ์•ˆํ•ด๋„ ๋œ๋‹ค. (greedy)
 *2. return ์กฐ๊ฑด์—์„œ aeiou ๊ฐœ์ˆ˜ ํŒ๋‹จ 
 * */
public class BOJ_1759_์•”ํ˜ธ๋งŒ๋“ค๊ธฐ {
	static int L,C;
	static char[] input;
	static boolean[]visited;
	static BufferedWriter bw;
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		bw = new BufferedWriter(new OutputStreamWriter(System.out));
		L = Integer.parseInt(st.nextToken()); //length of passwords
		C = Integer.parseInt(st.nextToken()); //number of given characters
		visited = new boolean[C];
		//password : ์ตœ์†Œ ํ•œ๊ฐœ์˜ ๋ชจ์Œ๊ณผ ๋‘๊ฐœ์˜ ์ž์Œ์œผ๋กœ ๊ตฌ์„ฑ . alphabetically ordered ์ฆ๊ฐ€์ˆœ์œผ๋กœ ๊ตฌ์„ฑ
		input = br.readLine().replace(" ", "").toCharArray();
		Arrays.sort(input); //sort ํ•˜๋ฉด, ํ˜„์žฌ๊ฐ€ ์ด์ „๋ณด๋‹ค ์ž‘์€๊ฑฐ ๊ณ ๋ฏผํ•  ํ•„์š” x

		char[] passwords = new char[L];
		dfs(0,0 , passwords);//depth, index
		bw.flush();
	}
	//count ๋กœ ๊ธธ์ด ์„ผ๋‹ค
	private static void dfs(int depth, int index, char[] passwords) throws IOException {
		if(depth == L ) {
			int vowels=0 , consonants=0;
			for(char c : passwords) {
				if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') {vowels++;}
				else {consonants++;}
			}
			if(vowels>=1 & consonants>=2) {
				for(char c:passwords) {
					bw.write(c);
				}
				bw.write("\n");					
			}
			return;

		}
		//์ค‘๋ณต ์„ ํƒ ํ—ˆ์šฉ x - visited ๋ฐฐ์—ด ์‚ฌ์šฉ
		for(int i = index ; i < C ; i++) { //indexํ™œ์šฉ ์ฑ…๊ฐˆํ”ผ
			if(visited[i])continue;
			visited[i] = true;
			passwords[depth] = input[i];
			dfs(depth+1 , i+1 , passwords);
			visited[i] = false;
		}
	}
}

ํŒจ์ŠคํŠธ์บ ํผ์Šค ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ ๋ฐ”๋กœ๊ฐ€๊ธฐ๐Ÿ‘‰ https://bit.ly/3FVdhDa

 

์ˆ˜๊ฐ•๋ฃŒ 100% ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ | ํŒจ์ŠคํŠธ์บ ํผ์Šค

๋”ฑ 5์ผ๊ฐ„ ์ง„ํ–‰๋˜๋Š” ํ™˜๊ธ‰์ฑŒ๋ฆฐ์ง€๋กœ ์ˆ˜๊ฐ•๋ฃŒ 100% ํ™˜๊ธ‰๋ฐ›์œผ์„ธ์š”! ๋” ๋Šฆ๊ธฐ์ „์— ์ž๊ธฐ๊ณ„๋ฐœ ๋ง‰์ฐจ ํƒ‘์Šน!

fastcampus.co.kr

๋ณธ ํฌ์ŠคํŒ…์€ ํŒจ์ŠคํŠธ์บ ํผ์Šค ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ ์ฐธ์—ฌ๋ฅผ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

'๐Ÿ““ STUDY > FASTCAMPUS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 12์ผ์ฐจ  (0) 2021.11.12
ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 11์ผ์ฐจ  (0) 2021.11.11
ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 9์ผ์ฐจ  (2) 2021.11.09
ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 8์ผ์ฐจ  (0) 2021.11.08
ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 7์ผ์ฐจ  (0) 2021.11.07
    '๐Ÿ““ STUDY/FASTCAMPUS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 12์ผ์ฐจ
    • ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 11์ผ์ฐจ
    • ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 9์ผ์ฐจ
    • ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 8์ผ์ฐจ
    JuneBee
    JuneBee
    โ‚Šหš.๐ŸŽง๐Ÿ““ ๊ธฐ๋ก์šฉ ๋ธ”๋กœ๊ทธ ๐“‚ƒ๐Ÿ–Š

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”