Skip to content

Conversation

@0224LJH
Copy link
Contributor

@0224LJH 0224LJH commented Oct 17, 2025

🧷 문제 링크

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

🧭 풀이 시간

180분

👀 체감 난이도

✏️ 문제 설명

세준이는 노트북을 누가 가져갈까봐 자물쇠로 잠가놓는다. 자물쇠는 동그란 디스크 N개로 구성되어 있다. 각 디스크에는 숫자가 0부터 9까지 숫자가 표시되어 있다. 디스크는 원형이기 때문에, 0과 9는 인접해 있다.

세준이는 한 번 자물쇠를 돌릴 때, 최대 세 칸을 시계 방향 또는 반시계 방향으로 돌릴 수 있다. 또, 최대 세 개의 인접한 디스크를 한 번에 돌릴 수 있다.

현재 자물쇠의 상태와 세준이의 비밀번호가 주어질 때, 자물쇠를 최소 몇 번 돌려야 풀 수 있는지 구하는 프로그램을 작성하시오.

자물쇠의 상태가 555이고, 세준이의 비밀번호가 464인 경우에, 각 디스크를 따로 따로 돌리면 3번 돌려야 한다. 하지만, 디스크 3개를 동시에 돌려서 444로 만들고, 2번째 디스크를 6으로 돌리면 2번만에 돌릴 수 있다.

🔍 풀이 방법

처음에는 단순히 그리디하게 접근했지만, 바로 틀렸다.
dp로 해야할것 같긴 했는데, 계속해서 구현을 실패해서, 결국 해설을 찾아서 풀었다.

dp[i][a][b][c]를 통해서 i번째에 a, i+1번째에 b, i+2번째에 c가 오게 하려면 필요한 최소 회전횟수를 구하면 되는것이다.

이를 구하는 메서드를 만들어서 재귀적으로 구하게하면 된다. 이때 메모이제이션을 통해 한번 구한값은 바로 반환하게 해야한다.

⏳ 회고

최근에 도전한 문제 중에 제일 어려웠다. 풀이 봤는데도 이해못해서 구현하는데 한참 걸렸다.... 아이디어 진짜 복잡하네

@0224LJH 0224LJH added fail 😢 해설을 보고 풀었거나, 못 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때 labels Oct 17, 2025
@ShinHeeEul ShinHeeEul merged commit 3e4c7d7 into main Oct 17, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fail 😢 해설을 보고 풀었거나, 못 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants