DP

    [JAVA] λ°±μ€€ 11057번 γ€μ˜€λ₯΄λ§‰ μˆ˜γ€‘

    νŒ¨ν„΄μ„ μ°ΎκΈ° μœ„ν•΄ 경우의 수λ₯Ό μ‚΄νŽ΄λ³΄μž. 0으둜 μ‹œμž‘ν•˜λŠ” 것도 ν—ˆμš©ν•˜κ³ , 00 μ΄λ‚˜ 11 κ³Ό 같이 같은 μˆ«μžκ°€ μ—°μ†λœ κ²½μš°μ—λ„ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ κ°„μ£Όν•˜λ―€λ‘œ μœ„μ™€ 같은 경우의 μˆ˜κ°€ μžˆμ„ 수 μžˆλ‹€. μ΄λ ‡κ²Œ 색을 μΉ ν•˜λ©΄ νŒ¨ν„΄μ΄ 보일 것이닀. 즉 N자리 i둜 μ‹œμž‘ν•˜λŠ” 였λ₯΄λ§‰ μˆ˜λŠ” N-1자리 i둜 μ‹œμž‘ν•˜λŠ” 였λ₯΄λ§‰μˆ˜λΆ€ν„° N-1자리 9둜 μ‹œμž‘ν•˜λŠ” 였λ₯΄λ§‰μˆ˜λ₯Ό λ”ν•˜λ©΄ λœλ‹€. Dp[i][j] = Dp[i-1][j] + ····· Dp[i-1][9] μœ„ 식을 ν‘œν˜„ν•˜λ©΄ λ˜λŠ”λ°, λ‚˜λŠ” for문을 3개 μ‚¬μš©ν•˜μ—¬ ν‘œν˜„ν•˜μ˜€λ‹€. for (int i = 2; i

    [JAVA] λ°±μ€€ 10844번 γ€μ‰¬μš΄ 계단 μˆ˜γ€‘

    λ¨Όμ €, νŒ¨ν„΄μ„ μ°ΎκΈ° μœ„ν•΄ 경우의 수λ₯Ό μ‚΄νŽ΄λ³΄μž 0으둜 μ‹œμž‘ν•˜λŠ” μˆ˜λ„ 경우의 수λ₯Ό λ”°μ Έλ³΄μ•˜κ³ , κ²°κ³Όλ₯Ό 좜λ ₯ν•  λ•Œ λ”ν•΄μ£Όμ§€λ§Œ μ•ŠμœΌλ©΄ λ¬Έμ œκ°€ μ—†λ‹€. λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ μœ„ν•œ, Dp[자릿수][μ‹œμž‘ν•˜λŠ”μˆ˜] 둜 2차원 배열을 μ„ μ–Έν•΄μ€€λ‹€. 0으둜 μ‹œμž‘ν•˜λŠ” 경우 3자리수둜 λ§Œλ“  κ³„λ‹¨μ˜ 수λ₯Ό μ‚΄νŽ΄λ³΄λ©΄, 0으둜 μ‹œμž‘ν•˜λŠ” μˆ˜λŠ” 010 κ³Ό 012 κ°€ μžˆλ‹€. 0을 λ•Œμ–΄λ†“κ³  보면, 10 κ³Ό 12 μž„μ„ μ•Œ 수 있고 0으둜 μ‹œμž‘ν•˜λŠ” 3자리 계단 μˆ˜λŠ” 1둜 μ‹œμž‘ν•˜λŠ” 2자리 κ³„λ‹¨μ˜ μˆ˜μž„μ„ μ•Œ 수 μžˆλ‹€. 즉, 0으둜 μ‹œμž‘ν•˜λŠ” N자리 계단 μˆ˜λŠ” 1둜 μ‹œμž‘ν•˜λŠ” N-1자리 κ³„λ‹¨μ˜ μˆ˜μ™€ κ°™λ‹€. Dp[N][0]=Dp[N-1][1] 9둜 μ‹œμž‘ν•˜λŠ” 경우 3자리수둜 λ§Œλ“  κ³„λ‹¨μ˜ 수λ₯Ό μ‚΄νŽ΄λ³΄λ©΄, 9둜 μ‹œμž‘ν•˜λŠ” μˆ˜λŠ” 987 κ³Ό 989κ°€ μžˆλ‹€. 9λ₯Ό 떼어놓고 보..

    [JAVA] λ°±μ€€ 11727번 【2×n 타일링 2】

    11726번 λ¬Έμ œμ™€ ꡉμž₯히 μœ μ‚¬ν•˜λ‹€. [JAVA] λ°±μ€€ 11726번 【2×n 타일링】 λ¨Όμ €, 문제의 원리λ₯Ό μ΄ν•΄ν•΄μ•Όν•œλ‹€. λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ° 문제둜, Dp[n] 은 2*n μ‚¬κ°ν˜•μ˜ 경우의 수λ₯Ό λ©”λͺ¨μ΄μ œμ΄μ…˜ ν•΄μ•Όν•œλ‹€. 2*1 μ‚¬κ°ν˜•μ˜ 경우 1κ°€μ§€, 2*2 μ‚¬κ°ν˜•μ˜ 경우 2κ°€μ§€κ°€ λ‚˜μ˜¨λ‹€. μœ„ κ·Έλ¦Ό yinq.tistory.com 11726 λ²ˆμ„ λ¨Όμ € μ΄ν•΄ν•˜λŠ” 것이 μ’‹λ‹€. 차이점이라고 ν•œλ‹€λ©΄, 2*2 μ‚¬κ°ν˜•λ„ μ‚¬μš©ν•˜μ—¬ μ±„μš°κΈ° λ•Œλ¬Έμ—, 2*3 μ‚¬κ°ν˜• 경우의 μˆ˜μ—μ„œ, 2*1 μ‚¬κ°ν˜• 경우의 μˆ˜κ°€ 2번 μžˆλŠ” 것과 같은 μ΄μΉ˜κ°€ λœλ‹€. 즉 Dp[n] = Dp[n-1] +2*Dp[n-2] μ‹μœΌλ‘œ 점화식을 κ΅¬μ„±ν•˜λ©΄ λœλ‹€! import java.util.Scanner; public class Main { public stati..

    [JAVA] λ°±μ€€ 11726번 【2×n 타일링】

    λ¨Όμ €, 문제의 원리λ₯Ό μ΄ν•΄ν•΄μ•Όν•œλ‹€. λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ° 문제둜, Dp[n] 은 2*n μ‚¬κ°ν˜•μ˜ 경우의 수λ₯Ό λ©”λͺ¨μ΄μ œμ΄μ…˜ ν•΄μ•Όν•œλ‹€. 2*1 μ‚¬κ°ν˜•μ˜ 경우 1κ°€μ§€, 2*2 μ‚¬κ°ν˜•μ˜ 경우 2κ°€μ§€κ°€ λ‚˜μ˜¨λ‹€. μœ„ 그림에 따라, 2*3 μ‚¬κ°ν˜•μ„ 생각해보면, 제일 였λ₯Έμͺ½μ— 2*1 μ‚¬κ°ν˜•μ„ μΆ”κ°€ν•˜κ³ λ‚˜μ„œ 남은 2*2 μ‚¬κ°ν˜•μ„ μ–΄λ–»κ²Œ μ±„μšΈμ§€ 고민해보면 λ˜λŠ”λ°, κ³ λ―Όν•  ν•„μš”κ°€ μ—†λ‹€. 이미 2*2 μ‚¬κ°ν˜•μ„ μ±„μš°λŠ” 경우의 수λ₯Ό μ•Œκ³ μžˆκΈ° λ•Œλ¬Έμ΄λ‹€. λ˜ν•œ, 1*2 μ‚¬κ°ν˜• λ‘κ°œλ₯Ό = λͺ¨μ–‘μœΌλ‘œ 놓고, 남은 2*1 μ‚¬κ°ν˜•μ„ μ–΄λ–»κ²Œ μ±„μšΈμ§€ 고민해보면 λ˜λŠ”λ°, 이 μ—­μ‹œ, 2*1 μ‚¬κ°ν˜•μ„ μ±„μš°λŠ” 경우의 수λ₯Ό μ•Œκ³  있기 λ•Œλ¬Έμ—, λ”ν•΄μ£ΌκΈ°λ§Œ ν•˜λ©΄λœλ‹€. 즉, ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄μ˜ ν˜•νƒœλ₯Ό 띄고 μžˆμŒμ„ νŒŒμ•…ν•  수 μžˆλ‹€. 2*3 μ‚¬κ°ν˜•μ„ μ±„μš°λŠ” 경우의 μˆ˜λŠ”..

    [JAVA] λ°±μ€€ 1463번 【1둜 λ§Œλ“€κΈ°γ€‘

    Dynamic Programing을 μ‚¬μš©ν•˜λŠ” λ¬Έμ œμ΄λ‹€. λ¨Όμ €, λ©”λͺ¨μ΄μ œμ΄μ…˜ ν•΄λ‘˜ dp[ ] 배열을 μƒμ„±ν•œλ‹€. dp[n]의 μ˜λ―ΈλŠ” nμ—μ„œ 1둜 λ³€ν™˜ν• λ•Œ λ“œλŠ” μ΅œμ†Œμ˜ μ—°μ‚°μˆ˜λ₯Ό μ €μž₯ν•  것이닀. λ¨Όμ € dp[0] κ³Ό dp[1] 의 값이 0 μž„μ€ λͺ…ν™•ν•œ 사싀이고, dp[2]λΆ€ν„° 쑰건문을 μ΄μš©ν•΄ μ •μ˜λ₯Ό ν•œλ‹€. 2λ₯Ό 1둜 λ§Œλ“œλŠ” 횟수의 μ΅œμ†Ÿκ°’μ€ λ¬΄μ—‡μΌκΉŒ. λ¨Όμ € 2κ°€μ§€ 연산을 μ§„ν–‰ν•  수 μžˆλ‹€. 1을 λΉΌκ±°λ‚˜, 2λ₯Ό λ‚˜λˆ„λŠ” 것 2-1 = 1 μ΄λ―€λ‘œ dp[2]=dp[1]+1=0+1=1 2/2=1 μ—­μ‹œ, dp[2]=dp[1]+1=0+1=1이닀. λ‘˜λ‹€ 값이 1μ΄λ―€λ‘œ 두 μ—°μ‚°μ˜ μ΅œμ†Ÿκ°’μ€ 1이닀. 2μ—μ„œ 1둜 λ§Œλ“œλŠ” μ—°μ‚°μ˜ μ΅œμ†Ÿκ°’μ€ 1μ΄λ―€λ‘œ, dp[2]=1을 κΈ°λ‘ν•œλ‹€. 3을 1둜 λ§Œλ“œλŠ” 횟수의 μ΅œμ†Ÿκ°’μ€? 3은 1을 λΉΌκ±°λ‚˜ 3을 λ‚˜λˆ„..