[9148๋ฒˆ] ์‹ ๋‚˜๋Š” ํ•จ์ˆ˜ ์‹คํ–‰ JAVAโ˜•

2022. 5. 6. 12:57ยท๐Ÿ”ฐ ๋ฐฑ์ค€/๋™์ ๊ณ„ํš๋ฒ• 1
728x90

 

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

 

9184๋ฒˆ: ์‹ ๋‚˜๋Š” ํ•จ์ˆ˜ ์‹คํ–‰

์ž…๋ ฅ์€ ์„ธ ์ •์ˆ˜ a, b, c๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ž…๋ ฅ์˜ ๋งˆ์ง€๋ง‰์€ -1 -1 -1๋กœ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์„ธ ์ •์ˆ˜๊ฐ€ ๋ชจ๋‘ -1์ธ ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ์˜ ๋งˆ์ง€๋ง‰์„ ์ œ์™ธํ•˜๋ฉด ์—†๋‹ค.

www.acmicpc.net

์•Œ๊ณ ๋ฆฌ์ฆ˜ [์ ‘๊ทผ ๋ฐฉ๋ฒ•]

static int w(int a, int b, int c) { 
		
	if(a <= 0 || b <= 0 || c <= 0) {
		return 1;
	}
		
	if(a > 20 || b > 20 || c > 20) {
		return w(20, 20, 20);
	}
		
	if(a < b && b < c) {
		return w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
	}
	
	return w(a - 1, b, c) + w(a - 1, b - 1, c) + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1);
}
์ด๋ ‡๊ฒŒ wํ•จ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„์€ ๋”ฐ๋กœํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
์ด ๋ถ€๋ถ„์„ ๋™์ ๊ณ„ํš๋ฒ•์œผ๋กœ ํ’€์–ด๋‚˜๊ฐ€๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒ˜์Œ ๋ฐฉ๋ฌธํ•˜๋Š” ์žฌ๊ท€๋ผ๋ฉด ๊ณ„์‚ฐ์„ ํ†ตํ•ด ์–ป์€ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ , ๊ทธ ํ›„ ์žฌ๋ฐฉ๋ฌธ์„ ํ•  ๊ฒฝ์šฐ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ €์žฅ๋œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ผ๋Š” ๊ฒƒ์ด๋‹ค.
์ด ๋ฌธ์ œ์—์„œ๋Š” a,b,c๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์ž‘์šฉํ•˜๋Š” ๋งŒํผ 3์ฐจ์› ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ํ’€์ดํ•˜๋ฉด ๋œ๋‹ค.
static int dp[][][];	// ์ด๋ฏธ ๋ฐฐ์—ด์ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •
 
static int w(int a, int b, int c) { 
 
	// ์ด๋ฏธ ๊ณ„์‚ฐ๋˜์–ด ์ €์žฅ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฐ’์„ ๋ฐ”๋กœ ๋ฐ˜ํ™˜ 
	if(dp[a][b][c] != 0) {
		return dp[a][b][c];
	}
		
	if(a <= 0 || b <= 0 || c <= 0) {
		return 1;
	}
 
	/*
	 * a, b, c์ค‘ ํ•˜๋‚˜๋ผ๋„ 20์ด ๋„˜์–ด๊ฐ€๋ฉด w(20, 20, 20)์„ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์—
	 * dp[20][20][20] ์— ์ €์žฅํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.
	 */
	if(a > 20 || b > 20 || c > 20) {
		return dp[20][20][20] = w(20, 20, 20);
	}
		
	if(a < b && b < c) {
		return dp[a][b][c] = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
	}
	
	return w(a - 1, b, c) + w(a - 1, b - 1, c) + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1);
}

๋Œ€๋žต์ ์œผ๋กœ ์ด๋ ‡๊ฒŒ dp๋ฐฐ์—ด์— ์ €์žฅํ•ด๋‘๋Š” ๊ฒƒ๊ณผ ์ด๋ฏธ ์ €์žฅ๋œ ๊ฒฝ์šฐ๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋Œ€๋ถ€๋ถ„ ์™„์„ฑ์ด ๋œ๋‹ค.



ํ’€์ด ๋ฐ ์ฝ”๋“œ

 

import java.util.Scanner;
 
public class Main {
 
	/*
	 * ํ•จ์ˆ˜ w์—์„œ a, b, c ์ค‘ 20์ด ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด w(20, 20, 20)์„ ํ˜ธ์ถœํ•˜๊ณ ,
	 * 0 ์ดํ•˜์ผ ๊ฒฝ์šฐ๋Š” 1์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
	 * ๊ฐ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 21 (0~20)์„ ๋„˜๊ธฐ์ง€ ์•Š๋Š”๋‹ค.
	 */
	static int[][][] dp = new int[21][21][21];
	
	public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in);		
		
		while(true) {
			
			int a = in.nextInt();
			int b = in.nextInt();
			int c = in.nextInt();
			
			// -1 -1 -1 ์ด ๋‚˜์˜ค๋ฉด ์ข…๋ฃŒ
			if (a == -1 && b == -1 && c == -1) {
				break;
			}
			
			System.out.printf("w(%d, %d, %d) = %d\n", a, b, c, w(a, b, c));
		}
		
	}
	
	static int w(int a, int b, int c) { 
		
		// a, b, c๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์œผ๋ฉด์„œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์ด ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ
		if(inRange(a, b, c) && dp[a][b][c] != 0) {
			return dp[a][b][c];
		}
		
		if(a <= 0 || b <= 0 || c <= 0) {
			return 1;
		}
		
		if(a > 20 || b > 20 || c > 20) {
			return dp[20][20][20] = w(20, 20, 20);
		}
		
		if(a < b && b < c) {
			return dp[a][b][c] = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
		}
		
		return dp[a][b][c] = w(a - 1, b, c) + w(a - 1, b - 1, c) + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1);
	}
	
	/*
	 *  ๋ฐฐ์—ด์„ ์ฐธ์กฐํ•˜๋ ค ํ•  ๋•Œ a, b, c ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋ฒ”์œ„ ๋ฐ–์˜ ์ˆ˜๊ฐ€
	 *  ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ฒดํฌ๋ฅผ ํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜๋‹ค.
	 */
	static boolean inRange(int a, int b, int c) {
		return 0 <= a && a <= 20 && 0 <= b && b <= 20 && 0 <= c && c <= 20; 
	}
}
๋ฌธ์ œ ์กฐ๊ฑด์„ ์ž˜ ์ฝ์–ด๋ณด๋ฉด ์„ธ ๋ณ€์ˆ˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ 0์ดํ•˜์ผ ๊ฒฝ์šฐ๋Š” 1, 20์„ ์ดˆ๊ด€ ๊ฒฝ์šฐ์—๋Š” w(20,20,20)์„ ํ˜ธ์ถœํ•œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์‹ค์ œ ์“ฐ์ด๋Š” ๋ฒ”์œ„๋Š” 0~20๊นŒ์ง€ ๋ฐ–์— ์•ˆ๋œ๋‹ค. ํ•œ๋งˆ๋””๋กœ dp[a][b][c]์— ๋Œ€ํ•˜์—ฌ ๊ฐ ์ฐจ์›์— ๋Œ€ํ•ด 21๊ฐœ(0~20)์˜ ๊ณต๊ฐ„๋งŒ ์ƒ์„ฑํ•ด์ค€ ๋’ค ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ•ด์ฃผ๋ฉด๋œ๋‹ค.
๋Œ€์‹ ์— ํ•œ๊ฐ€์ง€ ์กฐ๊ฑด์ด ๋ถ™๋Š”๋‹ค๋ฉด, ์ฒ˜์Œ w์„ ํ˜ธ์ถœํ•  ๋•Œ์—๋Š” ์Œ์ˆ˜ ๋˜๋Š” 20์ด ๋„˜๋Š” ์ˆ˜๊ฐ€ ์ž…๋ ฅ๋  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์„ ์ฐธ์กฐํ•˜๊ณ ์ž ํ•  ๋•Œ IndexOutOfBoundException๊ณผ ๊ฐ™์€ ์ž˜๋ชป๋œ ์ฐธ์กฐ๊ฐ€ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๊ธฐ์— ์ด๋ฅผ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ inRange()๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
728x90
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ”ฐ ๋ฐฑ์ค€/๋™์ ๊ณ„ํš๋ฒ• 1' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [1463๋ฒˆ] 1๋กœ ๋งŒ๋“ค๊ธฐ JAVAโ˜•
  • [9461๋ฒˆ] ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด JAVAโ˜•
  • [1149๋ฒˆ] RGB๊ฑฐ๋ฆฌ JAVAโ˜•
  • [2579๋ฒˆ] ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ JAVAโ˜•
juno1105
juno1105
๊ณต๋ถ€ํ•˜๋Š” ๊ฒธ ํฌํด ๋ธ”๋กœ๊ทธ
  • juno1105
    @juno1105
    juno1105
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (89)
      • ๐Ÿ’ฌ ์ž์œ  (3)
      • ๐Ÿ“– ์–ดํ•™ ๊ณต๋ถ€ (0)
      • ๐Ÿ“” ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ (4)
      • ๐Ÿ›  ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ๋ฒ• (1)
      • ๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (53)
        • ์Šคํƒ (4)
        • ํ (4)
        • ์ •๋ ฌ ๋ฐ ํƒ์ƒ‰ (17)
        • ๋ฆฌ์ŠคํŠธ (5)
        • ํ•ด์‹œ (1)
        • ํŠธ๋ฆฌ (8)
        • ํž™ (2)
        • ๊ทธ๋ž˜ํ”„ (12)
      • ๐Ÿ’ป ์ปดํ“จํ„ฐ ๊ตฌ์กฐ (0)
      • ๐Ÿšฅ ๋…ผ๋ฆฌํšŒ๋กœ (8)
      • ๐Ÿ”ฐ ๋ฐฑ์ค€ (20)
        • ํ, ์Šคํƒ, ๋ฑ (0)
        • DFS ์™€ BFS (3)
        • ๊ทธ๋ฆฌ๋”” (0)
        • ๋™์ ๊ณ„ํš๋ฒ• 1 (16)
        • ๋™์ ๊ณ„ํš๋ฒ• 2 (0)
        • ์ตœ๋‹จ ๊ฒฝ๋กœ (0)
        • ํŠธ๋ฆฌ (0)
        • ๋ฐฑํŠธ๋ž˜ํ‚น (0)
        • ์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ (0)
        • ์ง‘ํ•ฉ๊ณผ ๋งต (1)
      • ๐ŸŒˆ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (0)
      • ๐Ÿ“ฑ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

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

    • โœจ์ž๋ฃŒ๊ตฌ์กฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ปค๋ฆฌํ˜๋Ÿผโœจ
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ† ์ต
    ํ† ์ต 900์ ๋Œ€
    ํ† ์ต 910์ 
    ๋น…์˜คํ‘œ๊ธฐ๋ฒ•
    ์ •๋ ฌ ์ตœ์•…์˜ ๊ฒฝ์šฐ
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์ •๋ ฌ ์ตœ์„ ์˜ ๊ฒฝ์šฐ
    ํ† ์ต 920์ 
    ๊ทธ๋ž˜ํ”„ํƒ์ƒ‰
    ์ •๋ ฌ
    ์ตœ๋‹จ๊ฒฝ๋กœ
    ํ† ์ต 950์ 
    ์‹œ๊ฐ„๋ณต์žก๋„
    ํ† ์ต 900์ 
    ํ† ์ต 900
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
juno1105
[9148๋ฒˆ] ์‹ ๋‚˜๋Š” ํ•จ์ˆ˜ ์‹คํ–‰ JAVAโ˜•
์ƒ๋‹จ์œผ๋กœ

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