๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€ ์Šคํ„ฐ๋”” 9์ฃผ์ฐจ] 14888 ์—ฐ์‚ฐ์ž ๋ผ์›Œ๋„ฃ๊ธฐ ์‹ค๋ฒ„1 - ์ž๋ฐ”(JAVA) / DFS

๐Ÿ“‘ ๋ฌธ์ œ

https://www.acmicpc.net/problem/14888

 

14888๋ฒˆ: ์—ฐ์‚ฐ์ž ๋ผ์›Œ๋„ฃ๊ธฐ

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N(2 ≤ N ≤ 11)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” A1, A2, ..., AN์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Ai ≤ 100) ์…‹์งธ ์ค„์—๋Š” ํ•ฉ์ด N-1์ธ 4๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ, ์ฐจ๋ก€๋Œ€๋กœ ๋ง์…ˆ(+)์˜ ๊ฐœ์ˆ˜, ๋บ„์…ˆ(-)์˜ ๊ฐœ์ˆ˜, 

www.acmicpc.net

๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ

๋ฌธ์ œ

N๊ฐœ์˜ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด A1, A2, ..., AN์ด ์ฃผ์–ด์ง„๋‹ค. ๋˜, ์ˆ˜์™€ ์ˆ˜ ์‚ฌ์ด์— ๋ผ์›Œ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” N-1๊ฐœ์˜ ์—ฐ์‚ฐ์ž๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์—ฐ์‚ฐ์ž๋Š” ๋ง์…ˆ(+), ๋บ„์…ˆ(-), ๊ณฑ์…ˆ(×), ๋‚˜๋ˆ—์…ˆ(÷)์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ˆ˜์™€ ์ˆ˜ ์‚ฌ์ด์— ์—ฐ์‚ฐ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ๋„ฃ์–ด์„œ, ์ˆ˜์‹์„ ํ•˜๋‚˜ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ, ์ฃผ์–ด์ง„ ์ˆ˜์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๋ฉด ์•ˆ ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 6๊ฐœ์˜ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด 1, 2, 3, 4, 5, 6์ด๊ณ , ์ฃผ์–ด์ง„ ์—ฐ์‚ฐ์ž๊ฐ€ ๋ง์…ˆ(+) 2๊ฐœ, ๋บ„์…ˆ(-) 1๊ฐœ, ๊ณฑ์…ˆ(×) 1๊ฐœ, ๋‚˜๋ˆ—์…ˆ(÷) 1๊ฐœ์ธ ๊ฒฝ์šฐ์—๋Š” ์ด 60๊ฐ€์ง€์˜ ์‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ ์‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • 1+2+3-4×5÷6
  • 1÷2+3+4-5×6
  • 1+2÷3×4-5+6
  • 1÷2×3-4+5+6

์‹์˜ ๊ณ„์‚ฐ์€ ์—ฐ์‚ฐ์ž ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์•ž์—์„œ๋ถ€ํ„ฐ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ๋˜, ๋‚˜๋ˆ—์…ˆ์€ ์ •์ˆ˜ ๋‚˜๋ˆ—์…ˆ์œผ๋กœ ๋ชซ๋งŒ ์ทจํ•œ๋‹ค. ์Œ์ˆ˜๋ฅผ ์–‘์ˆ˜๋กœ ๋‚˜๋ˆŒ ๋•Œ๋Š” C++14์˜ ๊ธฐ์ค€์„ ๋”ฐ๋ฅธ๋‹ค. ์ฆ‰, ์–‘์ˆ˜๋กœ ๋ฐ”๊พผ ๋’ค ๋ชซ์„ ์ทจํ•˜๊ณ , ๊ทธ ๋ชซ์„ ์Œ์ˆ˜๋กœ ๋ฐ”๊พผ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค. ์ด์— ๋”ฐ๋ผ์„œ, ์œ„์˜ ์‹ 4๊ฐœ์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ณ„์‚ฐํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • 1+2+3-4×5÷6 = 1
  • 1÷2+3+4-5×6 = 12
  • 1+2÷3×4-5+6 = 5
  • 1÷2×3-4+5+6 = 7

N๊ฐœ์˜ ์ˆ˜์™€ N-1๊ฐœ์˜ ์—ฐ์‚ฐ์ž๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์‹์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ตœ๋Œ€์ธ ๊ฒƒ๊ณผ ์ตœ์†Œ์ธ ๊ฒƒ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N(2 ≤ N ≤ 11)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” A1, A2, ..., AN์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Ai ≤ 100) ์…‹์งธ ์ค„์—๋Š” ํ•ฉ์ด N-1์ธ 4๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ, ์ฐจ๋ก€๋Œ€๋กœ ๋ง์…ˆ(+)์˜ ๊ฐœ์ˆ˜, ๋บ„์…ˆ(-)์˜ ๊ฐœ์ˆ˜, ๊ณฑ์…ˆ(×)์˜ ๊ฐœ์ˆ˜, ๋‚˜๋ˆ—์…ˆ(÷)์˜ ๊ฐœ์ˆ˜์ด๋‹ค. 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์‹์˜ ๊ฒฐ๊ณผ์˜ ์ตœ๋Œ“๊ฐ’์„, ๋‘˜์งธ ์ค„์—๋Š” ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. ์—ฐ์‚ฐ์ž๋ฅผ ์–ด๋–ป๊ฒŒ ๋ผ์›Œ๋„ฃ์–ด๋„ ํ•ญ์ƒ -10์–ต๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10์–ต๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š” ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง„๋‹ค. ๋˜ํ•œ, ์•ž์—์„œ๋ถ€ํ„ฐ ๊ณ„์‚ฐํ–ˆ์„ ๋•Œ, ์ค‘๊ฐ„์— ๊ณ„์‚ฐ๋˜๋Š” ์‹์˜ ๊ฒฐ๊ณผ๋„ ํ•ญ์ƒ -10์–ต๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10์–ต๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

 

 

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฌธ์ œ๋ผ๊ณ  ํ•ด์„œ ํ’€์—ˆ๋Š”๋ฐ...DFS๋‹ˆ๊นŒ ๋ญ ๋งž๊ธด ํ•˜๋‹ค.

 

 ๐Ÿ’ก ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์ž์˜ ๊ฐœ์ˆ˜๋Š” ๋ฐฐ์—ด์— ๋‹ด๋Š”๋‹ค

 โœ”๏ธ N-1๊ฐœ์˜ ์—ฐ์‚ฐ์ž๋ฅผ ๋ชจ๋‘ ์“ธ ๋•Œ๊นŒ์ง€, ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์—ฐ์‚ฐ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ์จ๋ณด๋ฉฐ DFS ํƒ์ƒ‰์„ ํ•œ๋‹ค.

 โœ”๏ธ ํŠน์ • ์—ฐ์‚ฐ์ž์˜ ์‚ฌ์šฉ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋Š” ๋ฐฐ์—ด์˜ ํ•ด๋‹น ์ธ๋ฑ์Šค์— ๋‹ด๊ฒจ์ง„ ๊ฐ’์ด 0์ด ์•„๋‹˜์œผ๋กœ ํŒ๋‹จํ•œ๋‹ค. 

 

 

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ์ž๋ฐ”(Java)

public class Main_๋ฐฑ์ค€_14888_์—ฐ์‚ฐ์ž๋ผ์›Œ๋„ฃ๊ธฐ_์‹ค๋ฒ„I {

	static int N, max=-1000000000, min=1000000000;
	static int[] numbers, op;
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		numbers = new int[N];
		StringTokenizer st = new StringTokenizer(br.readLine());
		for (int i = 0; i < N; i++) {
			numbers[i] = Integer.parseInt(st.nextToken());
		}
		op = new int[4];	// 0:+ /1:- /2:* /3:/
		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < 4; i++) {
			op[i] = Integer.parseInt(st.nextToken());
		}//input
		
		dfs(1, numbers[0]);
		System.out.println(max);
		System.out.println(min);
	}//end of class
	
	private static void dfs(int idx, int num) {
		if(idx==N) {
			max = Math.max(max, num);
			min = Math.min(min, num);
			return;
		}
		for (int i = 0; i < 4; i++) {
			if(op[i]<=0) continue;
			op[i]--;
			switch(i) {
			case 0:// +
				dfs(idx+1, num+numbers[idx]);
				break;
			case 1:// -
				dfs(idx+1, num-numbers[idx]);
				break;
			case 2:// *
				dfs(idx+1, num*numbers[idx]);
				break;
			case 3:// /
				dfs(idx+1, num/numbers[idx]);
			}
			op[i]++;
		}
	}
}//end of main

 

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ