알고리즘의 꽃이라고 하는 dp의 주..... 헬이었다ㅋㅋㅋ
dp라고 해봤자 반복되는 문제의 정답을 메모이제이션 하는 것밖에 없는데 문제는 뭘 메모하냐고?!?!?! 메모야... 아무거나 저장하면 메모 아닌가요.....
근데 비슷한 유형을 여러개 풀다보니까 어느 정도는 메모하는 형식이라던가 방법이 한정되어 있는 것 같긴 하다. 방법을 알겠는건 아니고 정해져있다는 감만 생겼음..ㅎ
if not memo.get(x-2)
했는데 memo[0]=0
이라 not
이 붙으면 True
가 돼버려서 무한 루프에 빠진다... while
쓸 때 갖가지 조건으로 무한루프에 꽤나 많이 걸리는데 웬만하면 while
쓰지 말자ㅋfor
문으로 돌면서 작은 수부터 구해서 위로 올라오자.f(8)
을 만들려고 f(6)+f(4)
를 하려 했는데 그러면 중복이 생긴다. 배열에는 이미 2원과 4원으로 만들 수 있는 갯수가 저장돼 있기 때문에 f(6)
도 2원과 4원으로 만들 수 있는 갯수고 f(4)
도 2원과 4원으로 만들 수 있는 갯수이기 때문이다. 이전까지는 이미 가진 동전을 전부 써서 만들 수 있는 갯수가 저장돼있으므로 거기에다가 지금 동전만으로 만들 수 있는 경우의 수를 더해야 한다. 그냥 f(x-price)
면 안되고 지금 동전에서의 f(x-price)
여야 하는 것! 마지막 동전 빼고 x원을 만들 수 있는 수 + 마지막 동전 포함해서 (x-아까 뺀 동전금액)원을 만들 수 있는 수
여야 한다. 결국 탑다운이어도 점화식은 똑같네. 저장하는 방식만 sum값으로 1차원 배열에 저장하냐 누적합처럼 2차원 배열에 저장하냐인 것. 핵심은 "a,b,c원으로 x원을 만들고 싶으면 c 없이 a,b만으로 x원을 만든 개수+무조건 c를 하나 미리 배정해두고 x-c원을 만들 수있는 개수"를 구하면 되는 것. [탑다운 코드](1,1)(1,1)(1,2)
N어쩌구-k어쩌구
가 나오는데 k가 최대속도니까 이 식이 결국 N어쩌구
보다는 작거나 같다는 결론이 남... 근데 그걸 이제 처음 2차원 배열 만들때에는 n에 도달했을 때지만 각 돌마다 가능한 최대 속도는 돌 번호를 넣어서 구해야 하는... 하 시바 이거 생각해서 푸는 사람이 있다고??? 난 알고리즘 2년을 해도 못 풀듯 ㅈㄴ자괴감 지린다..visited
에 따른 최소비용"을 저장할지 어떻게 아냐고????? ....... 많이 풀다보면 감이 생기려나 전 날 외판원 혼자서 금방 풀고 오ㅎ 혹시 나 개천재??!? 했는데 응 아니었다..ㅎ dp 테이블에 뭘 저장할지만 알면 된다니 그걸 생각해내지 못하면 어차피 0점인걸!! 맨날 아이디어 참고만 하고 구현은 스스로 했다고 풀었다고 생각하는데 그건 푼게 아니다. 실제 시험에서는 아이디어를 생각해내지 못하면 말짱꽝인데 뭐가 푼거야.. 내가 지금 두문제 풀었다고 좋아하고 잘한다고 생각할 때가 아니다 너도 0점이나 마찬가지야....... 제일 쉬운 게임판에 dp 테이블 쓸 생각도 안하고 while문으로 했을 때는 시간초과 났었잖아...
3주차도 찬스 없었으면 1문제, 4주차는 0문제다... 아이디어 떠올리는 것도 시간초과 해결하는 것도 실력이다. 겸손해지자 채림아!!
visited
배열이랑 dp 배열을 하나로 합쳐버렸네.. 방문 안한건 -1
방문했으면 0
나머지 dp는 자연수로......... 미쳤다 이게 재능이라는 걸까 배워서 아는건가.. 갑자기 자괴감 오지고 지리는 밤. 이게 코치님이 말한 그런거구나 ..........