glowing713
Frontend-Deep-Dive
glowing713
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (97)
    • Languages (11)
      • JavaScript πŸ’› (3)
      • Python 🐍 (4)
      • Java β˜•οΈ (3)
      • Swift 🧑 (1)
    • Computer_Science (1)
      • Computer_Network πŸ•Έ (1)
    • Web_Frontend (4)
      • Vue.js (1)
    • Problem_Solving (76)
    • Server (1)
      • Spring πŸ€ (1)
    • AI (2)
      • NLP πŸ—£ (1)
      • AI_Math βž— (1)
    • κ°œλ°œν™˜κ²½ κΎΈλ―ΈκΈ° ✌ (1)
    • 생각정리 ✍🏻 (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸ§‘πŸ»β€πŸ’»Github

곡지사항

인기 κΈ€

νƒœκ·Έ

  • brute-force
  • bfs
  • DP
  • 이뢄탐색
  • Python
  • Stack
  • λ™μ κ³„νšλ²•
  • c++
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
  • BOJ
  • ps
  • 카카였 기좜
  • binary search
  • 완전탐색
  • Algorithm
  • 2019 카카였 개발자 겨울 인턴십
  • Java
  • boostcampaitech
  • Baekjoon
  • mst

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
glowing713

Frontend-Deep-Dive

[BOJ] λ°±μ€€ 11057 였λ₯΄λ§‰ 수 / 동적 κ³„νšλ²•(Dynamic-Programming)
Problem_Solving

[BOJ] λ°±μ€€ 11057 였λ₯΄λ§‰ 수 / 동적 κ³„νšλ²•(Dynamic-Programming)

2020. 3. 9. 22:13

이미지λ₯Ό ν΄λ¦­ν•˜λ©΄ 문제 μ‚¬μ΄νŠΈλ‘œ μ΄λ™ν•©λ‹ˆλ‹€.


 

 

πŸ’£ λ¬Έμ œ 이해

 

 

1. 2234와 3678, 11119 와 같이 μΈμ ‘ν•œ μˆ˜κ°€ κ°™κ±°λ‚˜ μ˜€λ¦„μ°¨μˆœμ„ μ΄λ£¨λŠ” 수λ₯Ό 였λ₯΄λ§‰ 수 라고 μ •μ˜ν•œλ‹€.

2. μˆ˜λŠ” 0 으둜 μ‹œμž‘ν•  수 μžˆλ‹€.

3. μž…λ ₯으둜 μ£Όμ–΄μ§€λŠ” N 자리 μˆ˜μ—μ„œ 였λ₯΄λ§‰ 수의 갯수λ₯Ό 좜λ ₯ν•œλ‹€.

 

동적 κ³„νšλ²•(Dynamic Programming) 방식을 μ‚¬μš©ν–ˆλ‹€.

 

 

 

 

πŸ’­ 풀이 κ³Όμ •

 

 

N = 1 인 경우   0, 1, 2, 3, 4, 5, 6, 7, 8, 9  둜 총 10 가지이닀.

 

N = 2 인 경우  00~09, 11~19, 22~29, .... , 88~89, 99 둜 총 55 가지이닀.

 

 

μ—¬κΈ°μ„œ κ·œμΉ™μ„ 찾아보면 2자리 수 (ab) μ—μ„œ 일의 자리 수 (b) λŠ” μ‹­μ˜ 자리 수 (a) 와 κ°™κ±°λ‚˜ ν¬λ‹€λŠ” 것을 λ°œκ²¬ν•  수 μžˆλ‹€.

 

즉,, 0b 의 경우  b λŠ” 0보닀 ν¬κ±°λ‚˜ 같은 경우, 1b λŠ” 1보닀 ν¬κ±°λ‚˜ 같은 경우, .... λΌλŠ” 것을 λ°œκ²¬ν•  수 μžˆλ‹€.

 

 

 

 

λ³€ν™”λ₯Ό ν‘œλ‘œ λ³΄λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

 

  0 1 2 3 4 5 6 7 8 9
N = 1 1 1 1 1 1 1 1 1 1 1
N = 2 10 9 8 7 6 5 4 3 2 1

 

 

λ„ν‘œ λ³΄μ΄λŠ” κ·ΈλŒ€λ‘œ 2차원 λ°°μ—΄λ‘œλ„ 풀이 κ°€λŠ₯ν•˜λ‚˜, 1ν–‰μ§œλ¦¬ λ°°μ—΄λ‘œ μ²˜λ¦¬ν•˜κ³  싢은 λ§ˆμŒμ— κ·Έλ ‡κ²Œ μ§œλ³΄μ•˜λ‹€.

 

점화식은 dp[i] = dp[i] + dp[j] 이닀.  ( i κ°€ 0 이라면 j λŠ” 0~9, i κ°€ 1 이라면 j λŠ” 1~9 )

 

이 점화식에 따라 N = 3 은 λ‹€μŒκ³Ό κ°™λ‹€.

 

N = 3 55 45 36 28 21 15 10 6 3 1

 

λ‘˜μ§Έ μžλ¦¬κ°€ 0인 경우, 10 + 9 + 8 + 7 + ... + 1 = 55 κ°€ 되고,

λ‘˜μ§Έ μžλ¦¬κ°€ 1인 경우, 9 + 8 + 7 + ... + 1 = 45 κ°€ 되고,

λ‘˜μ§Έ μžλ¦¬κ°€ 2인 경우, 8 + 7 + 6 + ... + 1 = 36 이 λ˜λŠ” 이런 방식이닀.

 

 

 

 

 

μž‘μ„± μ–Έμ–΄: C++

 

#include <cstdio>
#include <algorithm>    // std::fill_n
#define mod 10007

int dp[10] = {0, };

int solve(int num){
    int retVal = 0;
    // N = 2 이면 dp 배열을 ν•œ 번 더 μ±„μ›Œμ•Όν•˜κ³  N = 3 이면 dp 배열을 두 번 더 μ±„μ›Œμ•Όν•œλ‹€. -2 ν•œ 횟수 루프
    for (int k = 1; k <= num-1; ++k) {
        for (int i = 0; i < 10; ++i) {
            for (int j = i+1; j < 10; ++j) {
                dp[i] = (dp[i] + dp[j]) % mod;
            }
        }
    }
    // dp λ°°μ—΄μ˜ 총합이 N 자리 였λ₯΄λ§‰μˆ˜ 개수
    for (int i = 0; i < 10; ++i) {
        retVal = (retVal + dp[i]) % mod;
    }
    return retVal;
}


int main(){
    int numLeng = 0, count = 0;
    std::fill_n(dp, 10, 1);
    scanf("%d", &numLeng);
    // μž…λ ₯받은 N μžλ¦¬μˆ˜κΉŒμ§€ 계산할 것.
    count = solve(numLeng);
    printf("%d\n", count);
    return 0;
}

 

 

 

 

πŸ† 배운 점

 

 

λ°”λ‘œ μ•žμ˜ μ‰¬μš΄ 계단 μˆ˜μ™€ λΉ„μŠ·ν•œ λ¬Έμ œμ΄λ‹€.

 

λ°˜λ³΅λ˜λŠ” 문제λ₯Ό ν’€λ©΄μ„œ νŒ¨ν„΄μ΄ μ‘°κΈˆμ”© 감이 μž‘νžˆλŠ” λ“― ν•˜λ‹€.

 

많이 ν’€μ–΄λ³΄λŠ” 것이 μ€‘μš”ν•œ μ΄μœ κ°€ 이것인가보닀.

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'Problem_Solving' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[BOJ] λ°±μ€€ 12865 ν‰λ²”ν•œ λ°°λ‚­ / 동적 κ³„νšλ²•(Dynamic-Programming)  (0) 2020.03.12
[BOJ] λ°±μ€€ 11051 이항 κ³„μˆ˜ 2 / 동적 κ³„νšλ²•(Dynamic-Programming)  (0) 2020.03.11
μ™œ 정닡을 λ‚˜λˆˆ λ‚˜λ¨Έμ§€λ₯Ό 좜λ ₯ν•˜λΌκ³  ν• κΉŒ? - λ‚˜λ¨Έμ§€ μ—°μ‚°  (0) 2020.03.06
[BOJ] λ°±μ€€ 10844 μ‰¬μš΄ 계단 수 / 동적 κ³„νšλ²•(Dynamic-Programming)  (0) 2020.03.06
[BOJ] λ°±μ€€ 1699 제곱수의 ν•© / 동적 κ³„νšλ²•(Dynamic-Programming)  (0) 2020.03.04
    'Problem_Solving' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [BOJ] λ°±μ€€ 12865 ν‰λ²”ν•œ λ°°λ‚­ / 동적 κ³„νšλ²•(Dynamic-Programming)
    • [BOJ] λ°±μ€€ 11051 이항 κ³„μˆ˜ 2 / 동적 κ³„νšλ²•(Dynamic-Programming)
    • μ™œ 정닡을 λ‚˜λˆˆ λ‚˜λ¨Έμ§€λ₯Ό 좜λ ₯ν•˜λΌκ³  ν• κΉŒ? - λ‚˜λ¨Έμ§€ μ—°μ‚°
    • [BOJ] λ°±μ€€ 10844 μ‰¬μš΄ 계단 수 / 동적 κ³„νšλ²•(Dynamic-Programming)
    glowing713
    glowing713

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”