Skip to content

Conversation

@JHLEE325
Copy link
Contributor

🧷 문제 링크

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

🧭 풀이 시간

40분

👀 체감 난이도

✏️ 문제 설명

좌표평면 상에 수빈이와 동생이 있고 수빈이는 매 초 +1칸 / -1칸 / *2의 위치로 순간이동 할 수 있을 때 수빈이가 동생한테 도달할 수 있는 가장 빠른 시간과 그 때의 가짓수를 구하는 문제입니다.

🔍 풀이 방법

처음에는 큐 단위로 시간을 계산하며 BFS하는 방식으로 구현하였는데 중복을 허용하는 과정에서 큐에 너무 많은 중복값이 들어가서 시간초과가 발생했습니다.
그래서 다른 방법을 생각해보다가 time 배열과 count 배열을 각각 두어서 중복되는 경우에는 큐에 한번만 넣고 가짓수는 따로 세는 방법으로 풀이했습니다.

if (time[next] == 0 && next != n) {
                    time[next] = time[cur] + 1;
                    count[next] = count[cur];
                    q.add(next);
                } else if (time[next] == time[cur] + 1) {
                    count[next] += count[cur];
                }

⏳ 회고

일반적인 BFS로 접근했다가 만나는 시간초과 해결에 시간을 많이 소모했던 것 같습니다. 다양한 접근 방식을 떠올릴 수 있는 말랑한 뇌를 가지도록 노력해야겠습니다.

@ShinHeeEul ShinHeeEul merged commit ad386af into main Jul 23, 2025
1 check passed
@JHLEE325 JHLEE325 added the hint 💡 반례를 참고했거나 힌트를 얻고 풀었을 때 label Jul 23, 2025
@oncsr
Copy link
Contributor

oncsr commented Jul 23, 2025

말랑말랑

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

hint 💡 반례를 참고했거나 힌트를 얻고 풀었을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants