1개의 댓글이 있습니다.
-
-
canuyes -
3주일 동안 고민하다가 오늘에서야 이해했네요 ㅠㅠ.
따져보면 왜 굳이 3차원 캐시를 사용하냐는데서 나온 고민이었습니다.
여러방법으로 고민해보니까 정말 3차원 캐시가 필요하더군요...제가 벌려놓은 건 제가 수습해야 할것 같기도 하고,
혹시나 행여나 만에하나 저같이 이해 못하는 분들이 계실수도 있으니,
제가 문제 풀고 정리한 기록을 올립니다.개인적인 기록이다보니 말투가 디시체인점 양해 부탁드립니다. ㅠㅠ
중복을 제하는 부분이나 나머지 다루는 부분등은 책과 동일합니다.
왜 굳이 3차원 캐시를 사용해야만 하는지에 대한 기록입니다.기저사례를 제외한,
나머지 처리나, 중복을 재하는 부분등은 JM book과 동일합니다.
11년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
canuyes
아무래도 제 설명이 너무 성의 없는 것 같아 조금더 수정해서
질문 올립니다.
현재 ZIMBABWE문제를 풀고 있습니다.
JM님의 책에 실린 풀이는 완성했고, 스스로의 풀이를 작성중입니다.
랜덤으로 인풋을 던져보아도 답이 잘 출력됩니다.
하지만,
예제 입력의
12738173912 7
인풋에 대해 자꾸 틀린답을 내놓내요.
분명 제 코드에 오류가 있으리라 생각합니다.
좀 더 작은 사이즈의 문제에대한 오답 인/아풋풋을 알고싶습니다
(rand()함수로 던져 보았는데, 모두 맞게 처리가 됩니다.)
코드설명입니다.
JM님의
알고리즘문제해결전략(p.320~p.327)내용에 관련된것이고,
아래부터는 그냥 JM book이라고 칭하겠습니다.
일전에 JM님의 책에서 정수이외의 입력을 DP해야하는 경우,
TSP2가 예로 들어진것을 보았습니다.
TSP2에서는 현재도시 here과 정점의 방문정보 v(비트마스크)를 받아
CACHE[here][v] :
현재 here에 있고, 방문정보가 v로 주어질때, 남은 최소거리
로 설정 하였습니다.
저는 여기서 착안해서 ZIMBABWE 문제의 CACHE설정을 아래와 같이 하였습니다.
CACHE[x][y] :
숫자가 H[x]로 끝났고, 숫자들의 방문정보가 y로 주어질때,
e보다 작거나 같으면서, m으로 나누어 떨어지는 숫자들의 갯수를 1000000007로 나눈 값.
(H는 주어진 e를 오름차순으로 정렬한 string입니다.)
코드를 간결하게 하기위해,
저는 H에는 항상 '0'~'9' 보다항상 작은 ASCII값을 갖는 '-'를 포함시켰습니다.
아래는 주석을 포함한, 코드입니다.
JM book에서는 방문정보, 나머지 정보, less정보를 포함하여
캐시설정을 3차원으로 하는 것을 보았습니다.
제가 푼 풀이에서는 TSP2와 거의 동일한 캐시 설정을 사용합니다.
책에서 메모이제이션을 하는
이유는 재귀호출시 중복호출의 비효율성을 해결하기 위해서라고 읽었습니다.
제 짧은 생각에는 less정보나,
나머지 정보에 대해서는 중복으로 계산되는 부분이 없는것 같은데,
혹시 중복으로 계산되는 부분이 있어서 3차원 캐시를 설정하신 건가요???
제 코드의 문제점과 3차원 캐시를 사용하신 이유를 알고 싶습니다.
11년 전