[1463๋ฒˆ] 1๋กœ ๋งŒ๋“ค๊ธฐ JAVAโ˜•

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

www.acmicpc.net/problem/1463

 

1463๋ฒˆ: 1๋กœ ๋งŒ๋“ค๊ธฐ

์ฒซ์งธ ์ค„์— 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 106๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

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

์ด ๋ฌธ์ œ๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค.

  1.  X๊ฐ€ 3์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋ฉด, 3์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.
  2.  X๊ฐ€ 2๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋ฉด, 2๋กœ ๋‚˜๋ˆˆ๋‹ค.
  3.  1์„ ๋บ€๋‹ค

์ด ์กฐ๊ฑด์„ ํ† ๋Œ€๋กœ 1๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ์ฐพ์•„๋‚ด์•ผ ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ ๋ฌด์กฐ๊ฑด "ํฐ์ˆ˜๋กœ ๋‚˜๋ˆ ์„œ๋Š” ์•ˆ๋œ๋‹ค"

Integer[] dp; // ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ํ•  ๋ฐฐ์—ด
static int recur(int N) {
 
	// ํƒ์ƒ‰ํ•˜์ง€ ์•Š์•˜๋˜ N์ผ ๊ฒฝ์šฐ
	if (dp[N] == null) {
		// 6์œผ๋กœ ๋‚˜๋ˆ ์งˆ ๊ฒฝ์šฐ
		if (N % 6 == 0) {
			
		}
		// 3์œผ๋กœ๋งŒ ๋‚˜๋ˆ ์ง€๋Š” ๊ฒฝ์šฐ
		else if (N % 3 == 0) {
			
		}
		// 2๋กœ๋งŒ ๋‚˜๋ˆ ์ง€๋Š” ๊ฒฝ์šฐ
		else if (N % 2 == 0) {
			
		}
		// 2์™€ 3์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
		else {
			
		}
	}
	return dp[N];
}

๊ฐ ๋ถ€๋ถ„์— ์žฌ๊ท€ํ˜ธ์ถœ์„ ํ•˜๋ฉด์„œ DP๋ฅผ ์ตœ์†Œ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด ๋•Œ ๋ฌด์กฐ๊ฑด ํฐ์ˆ˜๋กœ ๋‚˜๋ˆˆ ๊ฐ’์ด ๋ฌด์กฐ๊ฑด ์ตœ์†Œ๊ฐ’์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค.

 

์ฆ‰, 6์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ๋Š” 3์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ์™€ 2๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ, 1์„ ๋นผ๋Š” ๊ฒฝ์šฐ ๋ชจ๋‘ ์žฌ๊ท€ํ˜ธ์ถœํ•˜์—ฌ 3๊ฐ€์ง€ ๊ฒฝ์šฐ ์ค‘ ์ตœ์†Œ๊ฐ’์œผ๋กœ DP๋ฅผ ๊ฐฑ์‹ ํ•ด์•ผ ํ•˜๊ณ , 3์œผ๋กœ๋งŒ ๋‚˜๋ˆ ์ง€๋Š” ๊ฒฝ์šฐ๋Š” 3์œผ๋กœ ๋‚˜๋ˆ„๋Š”๊ฒฝ์šฐ์™€ 1์„ ๋นผ๋Š” ๊ฒฝ์šฐ๋ฅผ ์žฌ๊ท€ํ˜ธ์ถœ, 2๋กœ๋งŒ ๋‚˜๋ˆ ์ง€๋Š” ๊ฒฝ์šฐ๋Š” 2๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ์™€ 1์„ ๋นผ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์žฌ๊ท€ํ˜ธ์ถœ, ๊ทธ ์™ธ์—๋Š” 1์„ ๋นผ๋Š” ๊ฒฝ์šฐ๋งŒ ์žฌ๊ท€ํ˜ธ์ถœ์„ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ๊ฐ ๋ถ€๋ถ„์— ์ด์ „ ์žฌ๊ท€ํ˜ธ์ถœ ์ค‘ ์ตœ์†Œ๊ฐ’์— 1์„ ๋”ํ•œ ๊ฐ’์ด ํ˜„์žฌ N์— ๋Œ€ํ•œ ์ตœ์†Œ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ๋œ๋‹ค.

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜1]

Integer[] dp; // ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ํ•  ๋ฐฐ์—ด
 
static int recur(int N) {
 
	if (dp[N] == null) {
		// 6์œผ๋กœ ๋‚˜๋ˆ ์ง€๋Š” ๊ฒฝ์šฐ 
		if (N % 6 == 0) {
			dp[N] = Math.min(recur(N - 1), Math.min(recur(N / 3), recur(N / 2))) + 1;
		}
		// 3์œผ๋กœ๋งŒ ๋‚˜๋ˆ ์ง€๋Š” ๊ฒฝ์šฐ 
		else if (N % 3 == 0) {
			dp[N] = Math.min(recur(N / 3), recur(N - 1)) + 1;
		}
		// 2๋กœ๋งŒ ๋‚˜๋ˆ ์ง€๋Š” ๊ฒฝ์šฐ 
		else if (N % 2 == 0) {
			dp[N] = Math.min(recur(N / 2), recur(N - 1)) + 1;
		}
		// 2์™€ 3์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
		else {
			dp[N] = recur(N - 1) + 1;
		}
	}
	return dp[N];
}

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜ 2]

static int recur(int N, int count) {
	if (N < 2) {
		return count;
	}
    
	/*
	 N์œผ๋กœ ๊ฐ๊ฐ 2์™€ 3์œผ๋กœ ๋‚˜๋ˆ„๋ฉด count๋Š” +1์— ๊ฐ ์—ฐ์‚ฐ์˜
	 ๋‚˜๋จธ์ง€ ๊ฐ’์„ ๋”ํ•ด์ค€ ๊ฒƒ์ด ๋œ๋‹ค.
	 ๋‚˜๋จธ์ง€ ๊ฐ’์€ ๋นผ๊ธฐ 1ํ–ˆ์„ ๋•Œ์˜ count ๊ฐ’๊ณผ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ
	*/
	return Math.min(recur(N / 2, count + 1 + (N % 2)), recur(N / 3, count + 1 + (N % 3)));
 
}

DP๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ’€์ดํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค. ์•„์˜ˆ ์žฌ๊ท€ ํ˜ธ์ถœํ•  ๋•Œ ๊ฐ™์ด ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ๊ฐ™์ด ๊ฐฑ์‹ ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ N=1 ์ด ๋˜๊ธฐ ์ „๊นŒ์ง€ count๋ฅผ ๋ˆ„์ ํ–ˆ๋‹ค๊ฐ€ 1์ด ๋˜๋ฉด ๋ˆ„์ ๋œ count๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์žฌ๊ท€๋ฅผ ํƒˆ์ถœ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

 

์˜ˆ๋ฅผ๋“ค์–ด N์ด 5๋ผ๊ณ  ํ• ๋•Œ, 5->4->2->1 ๋กœ ์ด 3์ด ๋œ๋‹ค.

์œ„ ์ˆ˜์‹์˜ ์›๋ฆฌ๋กœ ๋ณด์ž๋ฉด ์ด๋ ‡๋‹ค. recur(N/2, count +1 + (N%2))๋ฅผ ๋ณด์ž๋ฉด ์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

N = 5, count = 0
N = 5 / 2 = 2, count = 0 + 1 + 1(๋‚˜๋จธ์ง€๊ฐ’)
N = 2 / 2 = 1, count = 2 + 1 + 0(๋‚˜๋จธ์ง€ ๊ฐ’)
N = 1 ์ด๋ฏ€๋กœ return count -> 3์ด ๋ฐ˜ํ™˜

๋ฌผ๋ก  ๊ทธ ์˜†์˜ recur(recur(N / 3, count + 1 + (N % 3)) ๋„ ์žˆ์œผ๋‹ˆ ์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด ์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

recur(5,0)
min( recur(2,2) , recur(1, 2) )
min( min( recur(1, 3) , recur(0,5) ) , min( recur(0, 3), recur(0, 5) ) )
min( min( 3 , 5 ) , min( 3, 5 ) )
min( 3, 3 )
output : 3

 


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

- ๋ฐฉ๋ฒ• 1 : [Scanner + ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1]

import java.util.Scanner;
public class Main {
 
	static Integer[] dp;
 
	public static void main(String[] args) {
 
		Scanner in = new Scanner(System.in);
 
		int N = in.nextInt();
 
		dp = new Integer[N + 1];
		dp[0] = dp[1] = 0;
 
		System.out.print(recur(N));
 
	}
 
	static int recur(int N) {
 
		if (dp[N] == null) {
			// 6์œผ๋กœ ๋‚˜๋ˆ ์ง€๋Š” ๊ฒฝ์šฐ 
			if (N % 6 == 0) {
				dp[N] = Math.min(recur(N - 1), Math.min(recur(N / 3), recur(N / 2))) + 1;
			}
			// 3์œผ๋กœ๋งŒ ๋‚˜๋ˆ ์ง€๋Š” ๊ฒฝ์šฐ 
			else if (N % 3 == 0) {
				dp[N] = Math.min(recur(N / 3), recur(N - 1)) + 1;
			}
			// 2๋กœ๋งŒ ๋‚˜๋ˆ ์ง€๋Š” ๊ฒฝ์šฐ 
			else if (N % 2 == 0) {
				dp[N] = Math.min(recur(N / 2), recur(N - 1)) + 1;
			}
			// 2์™€ 3์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
			else {
				dp[N] = recur(N - 1) + 1;
			}
		}
		return dp[N];
	}
 
}

 

- ๋ฐฉ๋ฒ• 2 : [Scanner + ์•Œ๊ณ ๋ฆฌ์ฆ˜ 2]

import java.util.Scanner;
 
public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
 
		int N = in.nextInt();
		System.out.println(recur(N, 0));
	}
 
	static int recur(int N, int count) {
		// N์ด 2 ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ ๋ˆ„์ ๋œ count๊ฐ’์„ ๋ฐ˜ํ™˜
		if (N < 2) {
			return count;
		}
		return Math.min(recur(N / 2, count + 1 + (N % 2)), recur(N / 3, count + 1 + (N % 3)));
 
	}
}

 

728x90
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ”ฐ ๋ฐฑ์ค€/๋™์ ๊ณ„ํš๋ฒ• 1' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [2156๋ฒˆ] ํฌ๋„์ฃผ ์‹œ์‹ JAVAโ˜•
  • [10844๋ฒˆ] ์‰ฌ์šด ๊ณ„๋‹จ ์ˆ˜ JAVAโ˜•
  • [9461๋ฒˆ] ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด JAVAโ˜•
  • [9148๋ฒˆ] ์‹ ๋‚˜๋Š” ํ•จ์ˆ˜ ์‹คํ–‰ 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)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

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

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

  • ํƒœ๊ทธ

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

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
juno1105
[1463๋ฒˆ] 1๋กœ ๋งŒ๋“ค๊ธฐ JAVAโ˜•
์ƒ๋‹จ์œผ๋กœ

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