[바킹독의 실전 알고리즘] 0x10강 - 다이나믹 프로그래밍

Поделиться
HTML-код
  • Опубликовано: 11 ноя 2024

Комментарии • 129

  • @BaaaaaaaaaaaaaaaaaaaaarkingDog
    @BaaaaaaaaaaaaaaaaaaaaarkingDog  3 года назад +4

    질문 전에 이 글을 반드시 확인해주세요. 질문 가이드를 정확하게 따라간 질문에 대해서만 답변을 드리고 그렇지 않은 질문은 먼저 가이드에 맞게 수정을 요청할 예정입니다. github.com/encrypted-def/basic-algo-lecture/blob/master/docs/how-to-ask.md
    12p(09:23)에서 D[i] = i번째 계단까지 올라섰을 때 점수 합의 최댓값, 단 i번째 계단을 반드시 밟아야 함으로 정의해서도 풀이가 가능합니다. 자세한건 문제집에 있는 별해 2 코드를 참고해보세요.
    12p(10:07)에서 D[2] = 20 -> D[2] = 30으로 수정합니다.
    14p(13:34)에서 D[1][0], D[1][1], D[2][0], D[2][1]을 다 초기값으로 주는게 바람직해요. D[1][0]과 D[1][1]은 주는게 너무나도 당연하고 -> D[1][1], D[1][2], D[2][1], D[2][2]을 다 초기값으로 주는게 바람직해요. D[1][1]과 D[1][2]은 주는게 너무나도 당연하고
    22p(21:42) 2xn-2칸 -> 2x(n-2)칸
    27p(26:08)에서 D[3] = 2 -> D[3] = 1로 수정합니다.

  • @오수현-b9f
    @오수현-b9f Месяц назад

    헤헤 타일링 문제 바로 피보나치 인거 알아내버렸당 이 맛에 공부하는 거지~

  • @쩌리쌍
    @쩌리쌍 9 месяцев назад

    다른 분들도 저와 같은 고민을 할까해서 댓글 남깁니다!
    2579번의 점화식을 다른 방법의1차원 배열로도 풀 수 있습니다
    각 계단에 해당하는 배열을 score[i], i번째 계단까지 올랐을 때 받을 수 있는 최대 점수를 total[i]로 하여 배열 2개를 생성한 후, total[1] = score[1]
    total[1] = score[1] + score[2]로 초기화,
    점화식을 total[i] = max(total[i - 2], total[i - 3] + score[i - 1]) + score[i]로 두면 해결 가능합니다!
    max 함수의 두 번째 인자를 저렇게 둔 이유는 목표로 하는 계단까지 연속하여 3칸 오르는 경우를 배제하기 위함입니다.
    두 번째 인자의 경우, 목표 칸보다 전 칸 & 전전전 칸을 밟는 경우입니다.
    다른 분들께 많은 도움이 되길 바랍니다!

  • @user-oortcloud
    @user-oortcloud Год назад

    항상 감사합니다

  • @김태우-m3x
    @김태우-m3x 8 месяцев назад

    선생님 안녕하세요 ! 궁금한 점이 있어 댓글 남깁니다. 혹시 dp를 처음 공부하실때 어떻게 공부하셨는지 알 수 있을까요 ? 책도 사서 읽고 문제도 풀어보고 있는데 dp는 해도해도 어려워서 어떻게 공부를 하셨는지 궁금합니다 ! 항상 감사드립니다.

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  8 месяцев назад

      솔직히 너무 오래전이라 잘 기억은 나지 않지만.. 점화식을 잡아내는 수학적 센스를 기르는게 중요한데 이건 그냥 dp 문제들 난이도순으로 쭉 풀어보는 방법밖엔 없어보여요

    • @김태우-m3x
      @김태우-m3x 8 месяцев назад

      @@BaaaaaaaaaaaaaaaaaaaaarkingDog 뉴비는 웁니다 ...ㅜ.ㅜ 선생님 덕분에 어려워도 열심히 따라갈수 있게 된거 같습니다. 항상 감사드립니다 !

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  8 месяцев назад

      ​@@김태우-m3x 빠이탱!

  • @이히읗시옷-b8q
    @이히읗시옷-b8q 5 месяцев назад

    ㅋㅋㅋㅋ이게 프로그래밍이여 씽크빅이여 2xn타일문제보고 씽크빅부터 다시 하기로 마음먹었습니다

  • @삼남매의하루-n3x
    @삼남매의하루-n3x 7 месяцев назад

    안녕하세요 바킹독님 덕분에 알고리즘 공부 쉽고 편하게 하고 있습니다.!!!
    질문이 하나 있습니다.
    1915 - 가장 큰 정사각형 문제 접근입니다.
    여러 블로그를 봐도 왜 좌상, 상, 좌 이 세 개의 최솟값을 +1해준 값이 정사각형의 넓이가 되는 건지 이해가 안 됩니다..
    원래 공부를 안 했던 사람이라 이런 이해력이 좀 딸리는데 설명 부탁드려도 될까요?

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  7 месяцев назад

      이게 그림없이 댓글로 설명이 잘 될지 모르겠는데, 일단 d[i][j] 정의는 (i,j)가 우측하단인 정사각형 중 최대 넓이이고
      d[i][j] = k라고 하면 d[i-1][j]와 d[i-1][j-1]과 d[i][j-1]이 모두 k-1 이상이어야 해요. 반대로 말하면 d[i-1][j]와 d[i-1][j-1]과 d[i][j-1]중 어느 하나라도 k-1보다 작으면 d[i][j]는 절대 k일수가 없는데 이건 직접 상황을 생각해보시거나 그림으로 표현해서 이해하셔야할듯..
      위의 상황만 이해하고 나면 d[i][j] = min({d[i-1][j], d[i][j-1], d[i-1][j-1]}) + 1; 식은 자명하게 따라와요.

    • @삼남매의하루-n3x
      @삼남매의하루-n3x 7 месяцев назад

      @@BaaaaaaaaaaaaaaaaaaaaarkingDog 친절하게 답변해주셔서 감사합니다. 다른 문제 더 풀어보면서 감을 익혀볼게요!

  • @이준혁-b7g
    @이준혁-b7g 2 года назад +1

    바킹독님 1로 만들기 문제에서, 올려주신 답이랑 똑같은 논리의 코드라고 생각했는데 계속 틀리네요.
    놓친 부분이 있을까요? ㅎㅎ 좋은 강의 감사합니다!
    #include
    using namespace std;
    int dp[1000005];
    int n;
    int main(void)
    {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    dp[1] = 0;
    for(int i = 2;i

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  2 года назад

      i가 6의 배수일 때 과연 dp[i/3]+1이 고려되는지 고민해보세요. 그리고 앞으로는 질문 가이드 참고해서 제출 링크를 보내주세요.

  • @lIIIillli-s9d
    @lIIIillli-s9d 7 месяцев назад

    바킹독님 혹시 백준 14501 퇴사는 강의가 따로 없나요?? 풀어본 기억이 있는데 바킹독님 강의를 들었던 거 같아서요 ....!

  • @dddddd15926
    @dddddd15926 3 года назад +6

    바킹독님 저는 알고리즘 공부하면서 백트랙킹이 제일 어렵더군요....그래서 이리저리 찾아보다가 여기까지 왔는데 우선 백준 랭커신분이 찍은거에 한번 놀라고 강의 퀄리티에 두번 놀랐습니다. 재귀 백트랙킹 듣고 다른 주제도 다 들어보는 중입니다. 좋은 영상 찍어주셔서 감사합니다. 누군가에게 한 줄기 빛입니다 당신은.

  • @임재현-d4t
    @임재현-d4t 6 месяцев назад

    안녕하세요, 좋은강의 정말정말 감사합니다!
    블로그에도 질문글을 남겼지만, 혹시나해서 유튜브에도 같은 질문을 남겨봅니다.
    답변해주시면 너무너무 감사드리겠습니다~~~
    04:08
    선생님, 안녕하세요. 귀한강의 정말 감사합니다~!
    제가 DP정말 초보자라서 그러는데, 혹시 1463번 : 1로만들기 문제에서
    d[i] = d[i-1]+1;
    if(i%2 == 0) d[i] = min(d[i],d[i/2]+1);
    if(i%3 == 0) d[i] = min(d[i],d[i/3]+1);
    요부분에서 왜 +1 을 하는지 알려주실 수 있을까요??
    12일때 할수있는 연산 3가지가
    3으로 나누거나, 2로 나누거나 1을 빼거나 인데,
    '1을 빼거나' 에서 +1을 해주는 건 이해가 가는데,
    '3으로 나누거나'에서 D[12] = D[4] + 1
    '2로 나누거나'에서 D'12] = D[6] + 1
    이렇게, +1 을 왜 해줘야 하는지 잘 모르겠습니다 ㅠㅠ
    알려주시면 너무너무 감사드리겠습니다~~

  • @최재훈-y8d
    @최재훈-y8d Год назад +1

    안녕하세요 바킹독님 좋은 강의 감사합니다
    계단오르기 문제에서 밟지않는계단으로 최솟값을 구하는 과정에서 이해가 안되는 부분이 있어서 질문드립니다
    바킹독님께서는 d[k-2]와 d[k-3]을 통해서 최솟값을 구하셨는데 d[k-1]은 고려하지 않으신 이유가 무엇인가요?

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  Год назад +2

      d[k-1]을 고려한다는건 k-1 계단과 k 계단을 전부 밟지 않겠다는 의미인데 이건 "계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다"는 문제의 상황과 맞지 않습니다

  • @bluevulpe
    @bluevulpe 2 года назад

    항상 좋은강의 고맙습니당! 바킹독님 그런데 혹시 26:10 에서 D[6] = D[4] + 1 = 2 + 1 = 3 아닌가여? 강의듣고 직접 테이블 채워보는데 궁금해가지구용 ㅎㅎ 점심시간인데 맛점하시길바랍니댱!! 오로라 배경사진 넘 아름다워여! 제 버킷✨오로라보기인데 간접경험한 기분이네여

    • @bluevulpe
      @bluevulpe 2 года назад

      앗 점심먹고 나니깐 D[6]은 D[5]+1 or D[3]+1 or D[2]+1 중에 더 작은값을 할당하면 된다는걸 깨달았어여! 감사합니다~

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  2 года назад +1

      @@bluevulpe 좋습니다 버킷리스트 달성 기원합니다🤗🤗

    • @bluevulpe
      @bluevulpe 2 года назад

      @@BaaaaaaaaaaaaaaaaaaaaarkingDog 고맙습니댱!!🦊💙

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  2 года назад +1

      @@bluevulpe 아 그리고 저 우리코딩페스티벌 대상 탔슴다,,!!

    • @bluevulpe
      @bluevulpe 2 года назад

      @@BaaaaaaaaaaaaaaaaaaaaarkingDog 꺄아앙아아아아아아아아앙 젤 궁금했던 내용이었어요!!! 대박 핳 역시 우리 바킹독님이 쵝오에여!ㅠㅠ 행복하당 대상이 혹시 바킹독님인가 했는데 혹시가 역시였군요!!! 진심으로 축하드려욥!!!😆👍🙌🙌🙌다른 공간이었지만 함께 할 수 있어서 영광이었습니댱 컇

  • @ShinJoongHyuk
    @ShinJoongHyuk Год назад

    강의 너무 잘 듣고 있습니다. 본 영상에서는 다 bottom-up 방식으로만 풀이 하셨는데, 혹 1) top-down 방식과 비교하여 이점이 있을까요? 2) 어떤 문제를 dp로 풀 수 있는 문제라 가정한다면, 해당 문제는 무조건적으로 bottom-up 방식으로 풀수있을까요? 아니면 top-down 방식으로만 풀리는 문제가 따로 있을까요?
    개인적으로는 top-down 방식이 더 직관적으로 이해가 잘 되더라구요. 그런데 구글링 했을때 나오는 dp 문제 풀이법들로는 bottom-up 방식이 압도적으로 많아서 두가지 다 익혀야하는지 bottom-up 방식으로만 더 많은 문제를 접해봐야할지 고민입니다.

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  Год назад +2

      1. bottom-up과 top-down을 비교해보면 bottom-up은 top-down보다 빠르게 동작하지만 테이블을 채우는 순서를 내가 잘 생각해서 그 순서대로 채우게끔 코드를 짜야한다는 단점이 있습니다
      2. (100% 확실하지는 않은데) 모든 DP문제는 bottom-up으로 풀어도 되고 top-down으로 풀어도 됩니다. 저는 테이블을 채우는 순서가 직관적으로 보일 때에는 bottom-up을 쓰고, 순서가 헷갈릴땐 top-down으로 풉니다. 싹 다 top-down으로 풀어도 상관은 없지만 테이블을 채우는 순서를 고민해보는 차원에서 bottom-up으로 풀어보는 것도 괜찮습니다. 참고로 이번 단원에서는 재귀를 어려워할 수 있을 것 같아 bottom-up 방식을 소개하지 않았지만 부록에 "다이나믹 프로그래밍 심화" 단원을 추가할건데 거기서는 bottom-up 방식을 언급할 예정입니다.

    • @ShinJoongHyuk
      @ShinJoongHyuk Год назад

      @@BaaaaaaaaaaaaaaaaaaaaarkingDog 답변 정말 감사합니다. 앞으로의 강의들이 더욱 기대되네요!

  • @삼남매의하루-n3x
    @삼남매의하루-n3x 7 месяцев назад

    안녕하세요 바킹독님 백준 2240 자두나무 질문입니다.
    그 전 문제들을 3회독 하면서 dp를 익혔다고 생각했는데, 이번 문제는 초기값 설정을 왜 한 번도 움직이지 않을 때 계속 갱신해서 나아가는지, j값에 따라 i - 1 j- 1 또는 j 값으로 누적하는지 이해가 안 됩니다.. 3차원 베열이 낯설어서 그런걸까요? 자세한 설명을 듣고싶습니다!

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  7 месяцев назад

      일단 테이블의 정의는 이해하셨을까요? 사실 어떤 부분을 헷갈려하는지 파악이 잘 안되어서 좀 더 자세히 질문을 남겨주세요

    • @삼남매의하루-n3x
      @삼남매의하루-n3x 7 месяцев назад

      @@BaaaaaaaaaaaaaaaaaaaaarkingDog3차원 배열이 너무 낯설어서 그런 것 같습니다.
      한 번도 움직이지 않을 때를 기준으로 한 번 움직였을 때, 두 번 움직였을 때, w번 움직였을 때를 하나하나씩 최댓값으로 쌓는다고 생각하면 될까요?

    • @삼남매의하루-n3x
      @삼남매의하루-n3x 7 месяцев назад

      @@BaaaaaaaaaaaaaaaaaaaaarkingDog 이런 생각이 팍 떠오르지가 않네요..

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  7 месяцев назад

      ​@@삼남매의하루-n3x 1149번 느낌으로 자두의 위치가 테이블 인덱스로 들어가고 또 14442번 문제 느낌으로 움직인 횟수를 테이블 인자로 들어가야 한다는걸 알 수 있긴 합니다. dp는 자주 접해봐야 느니 못떠올렸다고 너무 슬퍼하지 마시고 이해하셨다면 다음에 비슷한 문제를 만났을때에는 풀어내겠다고 생각하셔도 됩니다.

  • @user-kj7vw8dw8
    @user-kj7vw8dw8 Год назад

    바킹독님 안녕하세요! 강의 항상 잘 보고있습니다. 계단오르기 문제에서 초기값에 관련해서 질문드립니다.
    DP[2][1] 같은 경우 , 연속된 1개의 계단을 밝아서 "2"까지 오는 경우이기 때문에 시작점에서 바로 2계단을 점프하는 경우로 생각이 되는데, 해당 문제에서 "한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다."는 조건 때문에, DP[2][1] 같은 경우에 초기값을 s[2]로 주는게 좀 위화감이 느껴집니다.
    i,j가 2보다 큰 경우에 위의 점화식이 만족한다고 한다면 상관없지만, 그렇다하더라도 왜 DP[2][1] = S[2]인지 궁금합니다!

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  Год назад +1

      "해당 문제에서 "한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다."는 조건 때문에, DP[2][1] 같은 경우에 초기값을 s[2]로 주는게 좀 위화감이 느껴집니다. " 라는 말씀이 무슨 뜻인지 잘 이해가 안가요

  • @은성-y8n
    @은성-y8n 3 года назад +3

    d[i] = i번째 계단까지 올라섰을때 밟지 않을 계단의 합의 최솟값, 단 i번째 계단은 반드시 밟지 않을계단으로 선택해야함 이라고 하셨는데... 이해가 잘 가지 않아서 질문합니다
    그렇다면 d[1] 은 첫번째 계단까지 올라섰을때 밟지 않을 계단의 합의최솟값이고 첫번째 계단은 반드시 밟지 않을 계단이라고 했으니 아무 계단도 오르지 않은 상태인 0이 되야하는거 아닌가요? 왜 S[1]의 값인 10이 되는지 이해가 안돼요 ㅜㅜ
    똑같이 d[2]는 두번째 계단까지 올라섰을때 밟지 않을 계단의 합의 최솟갑이면 2번째 계단을 밟으면 안되니깐 S[1]만 밟고 온경우 10이 되야하는거 아닌가요?

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  3 года назад +2

      d[i]의 정의는 "밟지 않을 계단"의 합의 최솟값입니다. 그리고 i번째 계단은 반드시 밟지 않을 계단으로 선택한다고 했으니 d[i]에는 s[i]의 값이 들어가야 합니다.
      먼저 d[1]을 보면 "i번째 계단은 반드시 밟지 않을 계단으로 선택해야함"이라고 했으니 1번 계단을 밟지 않은 계단으로 선택해야 하고, 계단이 1개밖에 없으니 더 따질거 없이 d[1] = s[1] =10입니다.
      d[2]를 보면 "i번째 계단은 반드시 밟지 않을 계단으로 선택해야함"이라고 했으니 2번 계단은 밟지 않을 계단으로 선택해야 하고, 1번 계단은 밟을 계단으로 선택하는게 최솟값을 구할 때 유리합니다. 이 때 d[2] = s[2] = 20입니다.
      d[3], d[4]를 추가적으로 설명해보면 먼저 d[3]의 경우 "i번째 계단은 반드시 밟지 않을 계단으로 선택해야함"이라고 했으니 3번 계단은 밟지 않을 계단으로 선택해야 하고, 1,2번 계단은 밟을 계단으로 선택하는게 최솟값을 구할 때 유리합니다.이 때 d[3] = s[3] = 15입니다.
      d[4]는 1, 4번 계단을 밟지 않을 계단으로 선택할 때 최소이고 이 때 d[4] = s[1] + s[4] = 35입니다.

    • @은성-y8n
      @은성-y8n 3 года назад

      @@BaaaaaaaaaaaaaaaaaaaaarkingDog 와 ㅜㅜㅜ 이렇게 자세히 설명해주시다니 감사합니다!! 항상 좋은 질의 강의 너무 잘보고 있습니다~~

  • @lIIIillli-s9d
    @lIIIillli-s9d 7 месяцев назад

    강의 잘 보고 있습니다! 혹시 14분 8초에서 D[1][2] = 0 인 이유가 뭘까요? 연속해서 2개의 계단을 밟으며 1번째 계단에 올라설 수는 없기 때문에 0이라고 한 걸까요?

  • @o.o1501
    @o.o1501 3 года назад +1

    기다리고 있었습니다...바쁘실텐데 빨리 올려주셔서 감사해요!!

  • @찬호김-s7n
    @찬호김-s7n 4 месяца назад

    2024-07-13 Kim chan ho lets go..

  • @i-hate-ps
    @i-hate-ps 2 года назад +1

    1. 테이블 정의하기
    2. 점화식 잡기
    이런 가이드라인 너무 좋네요ㅜㅜ ㅜ감사합니다!

    • @i-hate-ps
      @i-hate-ps 2 года назад

      특히 테이블 정의하기에서 dp의 감을 얻을 수 있었습니다..! 정말 감사합니다 ㅜㅜ

  • @SUCY35
    @SUCY35 9 месяцев назад

    13:22 선생님 안녕하세요. 이 부분에 대해서 제가 이해한 게 맞는지 확인받고 싶어서 덧글 남깁니다. [k][1] = 1개의 계단을 올라서 k 번째까지 오는 것이므로 점프하는 경우. [k][2] = 2개의 계단을 올라서 k 번째까지 오는 것이므로 계단을 하나씩 오르는 경우. 이렇게 이해했는데 혹시 제대로 이해한 걸까요? 틀린 부분이 잇다면 알려주시면 감사하겠습니다...

  • @김태우-m3x
    @김태우-m3x 11 месяцев назад

    선생님 혹시 전역변수로 배열 정의하실때 왜 5를 더해주시는지 알수 있을까요 ??

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  11 месяцев назад

      오버플로우를 방지하기 위해서 그냥 습관적으로 배열 크기에 약간 여유를 두는건데 크게 의미를 안두셔도 돼요

    • @김태우-m3x
      @김태우-m3x 11 месяцев назад

      @@BaaaaaaaaaaaaaaaaaaaaarkingDog 이해했습니당 답변 감사합니다 !!

  • @Goldkang-s1w
    @Goldkang-s1w 2 года назад

    바킹독님 점화식을 세우는 과정에서 n번째만 생각하면 된다라는 부분에서 재귀와 비슷하다는 느낌을 받았는데 맞나요?

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  2 года назад

      네 그렇게 볼수도 있는데 이전에 구한 값들로부터 점화식을 만들고 또 이전의 값들을 저장하고 있다는 상황을 이해하시면 좋습니다.

    • @Goldkang-s1w
      @Goldkang-s1w 2 года назад

      @@BaaaaaaaaaaaaaaaaaaaaarkingDog 감사합니다

  • @김윤구-f9n
    @김윤구-f9n 2 года назад

    저번 학기때 dp 문제 푸는것 때문에 엄청 돌려봤었는데 앞부분의 문제들을 거의 다 풀면서 여기까지 왔네요....감사합니다

  • @Freejia823
    @Freejia823 3 года назад

    돌아오셨군요. 이번 영상도 감사합니다!!!

  • @HS-gw3le
    @HS-gw3le Год назад

    안녕하세요 바킹독님! 늘 좋은 강의 감사드립니다.
    22:17에 나온 백준 11726번 정답 코드에서 14번째 줄에 궁금한 점이 있어서 질문드립니다.
    위 코드에서는 계산 중간 중간에 계속 10007로 나눈 나머지만을 가져가도록 해야한다고 하셨는데
    중간중간에 10007로 나눈 나머지 값들을 더한 것이 d[n] % 10007과 어떻게 같은 값을 가지는 지 궁금합니다.
    혹시 모듈러 연산 분배법칙( (A + B) % p = ((A % p) + (B % p)) % p)과 관련이 있는 것인가요?
    하지만 대입을 해도 이해가 잘 가지 않습니다....
    알려주시면 감사합니다! 좋은 하루 되세요^^

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  Год назад +1

      정수론에서 나오는 성질이긴 하지만 수식으로 복잡하게 생각하기보다는 재귀 단원에서 언급한 것처럼이 우리가 23567385267853+2467889237578198의 끝 자리(=10으로 나눈 나머지)를 계산해야하면 실제 덧셈을 수행하는 대신 자연스럽게 3+8 = 11을 계산해 끝자리가 1인걸 알아내는 것과 동일한 원리로 이해가 가능합니다

    • @HS-gw3le
      @HS-gw3le Год назад

      @@BaaaaaaaaaaaaaaaaaaaaarkingDog 오 덕분에 이해가 되었습니다. 감사합니다!!

  • @hh-hv5xe
    @hh-hv5xe Год назад

    선생님 9095 번에 1 2 3으로 표현하기 문제에서요 만약에 1 + 2 + 1 과 1 + 1 + 2 를 같은 식으로 본다고 문제 조건을 바꾼다면 어떻게 문제를 해결할 수 있을까요? 오래 고민해봤는데 잘 모르겟어서요 ㅠㅠ 힌트라도 주시면 다시 한 번 고민해보겠습니다

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  Год назад +1

      그것도 dp로 가능해요. 테이블 정의와 점화식 한번 고민해보시고 모르겠으면 knapsack dp라는걸 찾아보세요.

    • @hh-hv5xe
      @hh-hv5xe Год назад

      축구 보셨나보네요 ㅋㅋ 이른 시간에 고맙습니다 시도해볼게요

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  Год назад

      @@hh-hv5xe ㅋㅋㅋㅋㅋ 이젠 자야겠네여 화이팅입니다!

    • @hh-hv5xe
      @hh-hv5xe Год назад

      @@BaaaaaaaaaaaaaaaaaaaaarkingDog 선생님 knapsack 알고리즘 짜보고 제가 질문 드린 문제와 연관지어 생각해보았는데요, 예를 들어 4를 1 ,2,3을 이용한 합으로 표현할 때 1의 개수는 최대 4개 2의 개수는 2개 3의개수는 1개가 들어갈수 있고 이 7개를 각 item으로 하고 weight 와 value를 (1,1) (2,2), (3,3) 처럼 두고 dp의 값이 4와같은것이 몇개있는지 세면 되는건가요???

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  Год назад +1

      @@hh-hv5xe knapsack 유형중에 물건의 개수가 무한대라고 생각하고 푸는게 있어요. 그러면 무게가 1, 2, 3인 물건이 각각 무한개 있는 상황이랑 이 문제 상황이랑 똑같죠.

  • @잔다안
    @잔다안 3 года назад

    바킹독님아 dp를 설명할 때 dag랑 엮어서 생각하는 건 어떻게 생각하시나요? 초보자들한테는 이해하기 무리일까요?

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  3 года назад

      그래프를 아직 안다뤘어서 dag 얘기는 안했는데, 중급 단계를 넘어서려면 필요한 내용이긴 하죠. 근데 저라면 초보자한테는 dag 얘기를 안할듯여

    • @잔다안
      @잔다안 3 года назад

      오 답변 감사요

  • @dr8547
    @dr8547 3 года назад

    바킹독님 코딩 언제부터 하셨어요?
    진짜 머리 좋으신거 같은데... 원래 좋으신건가요 아니면 엄청난 노력을 해서 좋아지신건가요?

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  3 года назад

      코딩 자체는 초5때부터 했고 알고리즘은 고2부터 알았어요. 원래부터 수학을 잘했어서 좀 순탄하게 익혀나간 것 같네요

  • @314programs
    @314programs 3 года назад

    이거 한달동한 못풀었는데 점화식으로 하니까 바로풀리네요.
    너무 감사합니다, DP가 너무 약해서 풀수없었는데 배우고 가네요.
    최선을 다하겠습니다!

  • @안진서-x1b
    @안진서-x1b 2 года назад

    시뮬레이션에서 머리 깨지고 정렬로 도망쳐서 힐링했다가 다시 DP를 보니 억장이 무너지는것 같네요
    바킹독님 강좌 찾아서 정주행하게 된 계기가 그리디, DP에서 개박살이 나가지고 아는게 없어서 그런것 같다 싶어서 찾아보게 된건데 결국 또 만나네요 따흐흑

  • @syj4716
    @syj4716 5 месяцев назад

    21:39 왜 남은 건 2xn-2칸인가요.... ㅜㅠ

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  5 месяцев назад

      2x(n-2) 칸이에요

    • @syj4716
      @syj4716 5 месяцев назад

      와 직접 답장 주실 줄 몰랐는데ㅜㅠ 정말정말 감사합니다:) 덕분에 좋은 영상들로 코테 공부하고 있습니다👍🏻👍🏻 ​@@BaaaaaaaaaaaaaaaaaaaaarkingDog

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  5 месяцев назад +1

      @@syj4716 지금 보니 2xn-2 칸이 오해의 소지가 있어보여서 고정 댓글에 2x(n-2) 임을 언급해두었습니다 감사합니다 화이팅하세요~~

  • @김태우-m3x
    @김태우-m3x 11 месяцев назад

    선생님 DP 문제집 BOJ 1912 연속합 문제 20번째 줄 코드가 이해가 가지 않습니다.
    20번째 줄 코드 : d[i] = max(d[i], d[i-1] + a[i]);
    d[i-1] + a[i] 보다 a[i]가 크다면 . k+1번째 이후 항 과는 상관없이 누적합이 더 작기때문에 거기까지만 더해야 최대값이다 . 라고 하면 맞는말 인가요 ?
    블로그 글 중 구 다이나믹 프로그래밍에서는 이 문제를 다루셔서 코드를 봤는데 현재 코드랑 같은 코드 인건가요 ? 문제 링크를 올리면 댓글이 삭제 되어 문제 번호만 올립니다 ㅜ.ㅜ

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  11 месяцев назад

      같은 코드이긴 한데 d[i] = max(a[i], d[i-1] + a[i]) 혹은 d[i] = max(d[i-1], 0) + a[i]가 더 알아보기 쉬울 것 같네요. 우선 d[i]의 정의는 i번째 항으로 끝나는 연속합 중 최대이고, 선택지는 2가지인데
      - 그전의 연속합이 0 이상일 경우 가져오기 (d[i] = d[i-1] + a[i])
      - 그전의 연속합이 음수일 경우 버리기(d[i] = a[i])
      입니다.

  • @holein345
    @holein345 Год назад

    오 신난다 예~

  • @zihasoo
    @zihasoo 2 года назад

    바킹신님 DP 장인이 되게 해주세요

  • @권석원-b2k
    @권석원-b2k 2 года назад

    안녕하세요 강의 잘 듣고있습니다. 계단 오르기 문제에서 테이블 정의가 현재까지 j개의 계단을 연속해서 밟고 라는 문구가 이해가 잘 안됩니다.계단을 연속으로 밟는거 자체가 문제에서 안되는거 같은데 j 개의 계단을 연속으로 밟는 다는게 어떤 의미인지 구체적으로 설명 부탁드립니다 ㅠ
    (제 생각에는 2개의 계단을 연속으로 밟는거는 연속된 3칸을 밟을 수 없는 규칙에 위배된다고 생각이됩니다.)

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  2 года назад

      연속된 3칸을 밟을 수 없는거지 연속된 2칸을 밟을 수는 있죠. 예를 들어 내가 1, 3, 4번 계단을 밟았으면 현재까지 2개의 계단을 연속해서 밟은거고 이 경우는 D[4][2]에서 고려가 됩니다.

  • @헤이호-o7q
    @헤이호-o7q 3 года назад

    갓킹독님 1463번 DP말고 BFS로도 풀어봤는데 메모리 초과가 나더라고요, 제가 방문 처리를 안해서 그런가 생각해봤는데 해당 문제는 방문처리를 하면 안되지 않나요? 왜냐하면 해당 칸 까지의 거리중 최솟값을 덮어씌워줘야하니 방문 했다고 방문을 안하면 안되지않나요!?

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  3 года назад

      1에서 뻗어나가는 방식으로 구현하면 될텐데(백준 숨바꼭질 문제처럼) 잘못된 방법으로 구현한 것 같네요. 어떤 방식으로 구현한건지 코드를 보여주세요.

    • @헤이호-o7q
      @헤이호-o7q 3 года назад

      @@BaaaaaaaaaaaaaaaaaaaaarkingDog 오잉 답글을 달아도 계속 삭제가 됩니다!

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  3 года назад

      @@헤이호-o7q 유튜브에서 스팸으로 분류하는 것 같은데 블로그 방명록이나 댓글에 남겨주세요

  • @영호-y7e
    @영호-y7e 8 месяцев назад

    0x10강 - 다이나믹 프로그래밍 문제집 클리어

  • @김서연엘텍공과대학소
    @김서연엘텍공과대학소 2 года назад

    12852번 값테이블에서 D[3] = 1 아닌가요? 3/3 = 1 해서 한번연산으로 바로 1로 갈 수 있으니까요!

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  2 года назад +1

      넵 D[3] = 1 맞습니다. 고정한 댓글 보시면 수정한다고 써주었습니다!

    • @김서연엘텍공과대학소
      @김서연엘텍공과대학소 2 года назад

      @@BaaaaaaaaaaaaaaaaaaaaarkingDog 앗 그렇군요 ㅠ 가려져 있어서 못봤네요! 답변 감사합니다! 항상 명료하고 깔끔한 좋은 강의 제공해주셔서 도움이 정말 많이 되고 있어요!🥰🥰

  • @zero2vec
    @zero2vec 3 года назад

    계단 오르기 문제 예전에 풀었던 포도주 시식 문제랑 완전 똑같은 줄 알고 코드 똑같이 짰다가 크게 혼났네요 ㅜㅜ
    계단 오르기 문제는 다음 계단을 무조건 1~2칸 이내로 밟아야 한다는 조건이 있어서 풀이가 달라지는 건가요?

  • @too_late_to_stop
    @too_late_to_stop 3 года назад

    12:45 에서 D[k][2] = ? 를 구하는 식에서 D[k-1][1] 만 언급을 하셨는데요... k-2 번째 계단까지 2개의 연속된 계단을 거친경우 D[k-2][2] 값을 갖고 여기서 2칸 점프를 하는 경우 k위치에 도달할 수 있으니(2개의 연속된 계단을 유지하면서) D[k-2][2]인 경우도 고려를해서 max(D[k-1][1], D[k-2][2])로 계산하는게 어떨지 궁금합니다.

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  3 года назад

      D[k][2]는 "현재까지 2개의 계단을 연속해서 밟고" 라는 조건이 있기 때문에 k-1번째 계단을 반드시 밟아야하고, 그렇기 때문에 D[k-2][2]는 고려가 되지 않습니다.

  • @노호연-h6v
    @노호연-h6v 2 года назад

    바쁘신거 다 끝나고 강의 완결나면 2차원 dp도 찍어주세요오

  • @호이-t8y
    @호이-t8y 3 года назад

    항상 감사합니다!! 바킹독님 😄

  • @jackson_park
    @jackson_park 3 года назад

    저번에 DP에서 좌절하고 오랫만에 다시 풀어보니 역시 어려웠지만 계단오르기를 혼자 풀어서 기분 좋아졌네요. 역시 DP는 계속 풀어봐야 하는 것 같습니다.
    다음 강좌도 기다릴게요~~ 즐거운 추석되세요~~

  • @정상협-o5q
    @정상협-o5q 3 года назад

    정주행 하였습니다! 좋은 강의 감사합니다

  • @정원희-k5i
    @정원희-k5i 3 года назад

    바킹독님, 강의 잘 듣고 있습니다. 목표가 있어 첫편부터 강의랑 문제집 보면서 열심히 따라가고는 있는데요. 오늘 DP 1932 에서 좌절을 맛봤습니다 ^^; 반복학습만이 답이겠죠 .. 항상 감사합니다.

  • @kalee9952
    @kalee9952 3 года назад +1

    이런 강의가 왜 지금까지 조회수가 이거밖에 안되는걸까요.. 너무 깔끔한 강의 잘봤습니다.

  • @이성진-i7o
    @이성진-i7o Год назад

    230921 감사합니다!

  • @kaihen9475
    @kaihen9475 3 года назад

    감사합니다 정말좋네요~ 지우지말아주세요!!

  • @유유-o6r6n
    @유유-o6r6n 3 года назад

    알고리즘 독학중인데 덕분에 공부하는 방향이 잡히고 있습니다. 항상 감사합니다 !!

  • @BalanceGamers
    @BalanceGamers 3 года назад

    1463에서 만약 6으로 나눠진다면 min(d[i],d[i/2]+1,d[i/3]+1) 전부 고려해야 하지 않나요?

    • @BalanceGamers
      @BalanceGamers 3 года назад

      for i in range(2,N+1):
      if i%6==0:
      D[i]=min(D[i//3],D[i//2],D[i-1])+1
      elif i%3==0:
      D[i]=min(D[i//3],D[i-1])+1
      elif i%2==0:
      D[i]=min(D[i//2],D[i-1])+1
      else:
      D[i]+=D[i-1]+1
      에서 i%6은 의미없는 부분일까요?

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  3 года назад

      유튜브가 제멋대로 스팸으로 분류해서 늦게 확인했네요. 6으로 나눠지면 i/2에서 오는거, i/3에서 오는거를 다 고려해야 하는건 맞는데 그래서 15번째 줄에서 else if를 안쓰고 그냥 if를 썼습니다. 6의 배수이면 14, 15번째 줄의 명령이 다 수행됩니다. 닝체님이 달아주신 코드처럼 작성해도 잘 동작하지만
      D[i] = D[i-1] + 1
      if i % 3 == 0: D[i] = min(D[i], D[i//3]+1)
      if i % 2 == 0: D[i] = min(D[i], D[i//2]+1)
      으로 쓰면 더 깔끔하겠죠.

    • @BalanceGamers
      @BalanceGamers 3 года назад

      @@BaaaaaaaaaaaaaaaaaaaaarkingDog 와.. 그러네용 감사합니다.

    • @BalanceGamers
      @BalanceGamers 3 года назад

      ​@@BaaaaaaaaaaaaaaaaaaaaarkingDog 1로 만들기 2에서 6으로 나눠지는 경우를 고려하려고 했었습니다. 문제 특성상 min 함수를 못쓰게 됐는데. 이러면 if문을 여러개 써야하고, 만일 고려해질 게 많아진다면 더더욱 늘어나게 될텐데요. 이런상황에서는 그냥 if문을 늘리는 방법밖엔 없나요?

    • @BaaaaaaaaaaaaaaaaaaaaarkingDog
      @BaaaaaaaaaaaaaaaaaaaaarkingDog  3 года назад

      ​@@BalanceGamers 일단 if문을 과하게 쓰는게 아닌가 싶더라도 본인이 생각하는 로직대로 구현을 성공해보는게 중요하고 이후 다른 사람의 코드를 보며 내 로직에서 개선을 할 부분이 없는가 생각해보면 좋겠죠. 참고로 1로 만들기 2 문제의 경우도 굳이 6으로 나눠지는 경우를 생각하지 않아도 되는 풀이를 본문에서 언급하고 있긴 합니다.

  • @chriscoding
    @chriscoding 2 года назад +2

    강의 너무 깔끔합니다!! ㅎㅎ
    다만 자막이랑 유튜브 진행바랑 같은 선상에 있어서 끊어서 강의를 보면 자막을 못 본다는 아쉬움이 있네요 .

  • @isitblacktea
    @isitblacktea 3 года назад

    킹독이형 설명 너무잘하고~

  • @즐쌤
    @즐쌤 3 года назад

    감사합니다 도움이 많이되고있어요^^

  • @becomeweasel
    @becomeweasel 3 года назад

    DP 정말 너무너무어려워요,,, 그래프나 시뮬레이션 이런 건 골2도 잘푸는편인데 dp는 골5만되도 힘드네요 ㅠㅠㅠㅠ

  • @basha____
    @basha____ Год назад

    DP가 가장 어려워요 ㅠㅠ

  • @영훈남나이뚜
    @영훈남나이뚜 2 года назад

    응애... 하나도 이해가 안가ㅠㅠ