hbh1107   7년 전

https://www.acmicpc.net/problem/1514

 

안녕하세요. 자물쇠 문제 지금 두달 째 못풀고 있습니다. ㅜ

그래서 조언 구하고자 글 올립니다. 어떤 부분이 고려되지 않았는지 알려주시면 감사하겠습니다.

 

1. 풀이 방식 : dp[cur][n1][n2] : 현재 처리해야 될 디스크 위치가 cur이고 cur위치의 디스크 숫자가 n1, cur + 1 숫자가 n2일 때 최소 디스크 회수로 하였습니다.

고려사항 : 최대 3개의 디스크를 한번에 돌릴수 있고 최대 3칸까지 한번에 돌릴 수 있음

 

2. calc(int cur, int n1, int n2) 설명.

현재 위치 cur의 숫자가 n1이고 password의 숫자가 d1일때 왼쪽으로 회전해서 d1으로 갔을때의 횟수. 오른쪽으로 회전해서 d1으로 갔을때의  횟수 둘중 작은 값을 우선 구합니다.

예를 들어 n1의 값이 7이고 d1이 1인 경우 7 -> 8 -> 9 -> 0 -> 1 이렇게 왼쪽으로 돌리는 경우와 7 -> 6 -> 5 -> 4 -> 3 -> 2 -> 1이렇게 오른쪽으로 돌리는 경우 둘중 작은 값으로 현재 위치의 회전수를 구하게했습니다.

이렇게 구한 횟수를 현재의 디스크만 돌린 경우. 두개의 디스크를 같이 돌린 경우. 세개의 디스크를 같이 돌린 경우

세개 중 가장 작은 횟수를 dp에 저장하게 하였습니다.

 

어떤 부분이 잘 못 된 것인지 여러 조언 주시면 정말 감사하겠습니다.

zlzmsrhak   7년 전

이 부분이 잘못된 거 같습니다.

이렇게 구한 횟수를 현재의 디스크만 돌린 경우. 두개의 디스크를 같이 돌린 경우. 세개의 디스크를 같이 돌린 경우
세개 중 가장 작은 횟수를 dp에 저장하게 하였습니다.

디스크를 돌릴 때 1개, 2개, 3개를 같이 돌리는 경우가 조합될 수도 있기 때문에,

(예를 들어 1개 1번, 2개 1번, 3개 한번 이런식으로)

사실상 가능한 모든 돌리는 조합을 다 해봐야 합니다.

입력 받을 때, "" 안에 \n 이나 띄어쓰기 같은게 들어가 있으면 문제가 생길 수 있으니 빼주세요

댓글을 작성하려면 로그인해야 합니다.