kuidoli   2년 전

풀이를 하고 나니 의문이 생겨서 질문드립니다.

문제에서 수빈이와 동생이 현재 0이상 100000이하의 위치에 있다고 했지만

수빈이와 동생이 해당 위치를 벗어나면 안된다는 조건은 없는듯 해서요.

다른 분들의 풀이를 보아도 방문체크를 할때 방문범위를 0이상 100000이하로 제한하는데 그 이유가 궁금합니다.

이 방문범위를 넘어서면 어차피 최소 이동시간을 구할 수 없어서 일까요?

이 문제처럼 0이상 100000이하의 조건에서 방문 중에 음수로 갔을 경우에는 물론 최소 이동시간을 찾기 어려울 것입니다. 

또한 수빈이가 50001 동생이 100000이라고 했을때도 50001 -> 50000 -> 100000이 50001 -> 100002 -> 100001 -> 100000보다 빨리 갈 수 있는 것처럼 100000을 넘어서면 최소 이동시간을 구하기 어려울 것입니다.

그런데 만약에 문제의 조건이 바뀌어서 수빈이와 동생이 0이상 15이하의 위치에 있다고 해도 그래야 하는 것인지 모르겠습니다. 

만약에 수빈이는 현재 점 N(0 ≤ N ≤ 15)에 있고, 동생은 점 K(0 ≤ K ≤ 15)에 있다고 했을때 수빈이가 8, 동생이 15라고 하면 8 -> 16 -> 15로 가는게 가장 빠른 조건이라 15를 넘어서게 되어서요.

sth3353   2년 전

100,000은 짝수이지만, 15는 홀수이기 때문이 아닐까요?

직접 짜보지는 않았지만 각 시작점에 대해 나머지 모든 위치까지의 거리를 수빈이의 위치를 100000으로 제한했을 때 / 200000으로 제한했을 때 구해보고 답이 다른 경우가 있는지를 확인해보면 O(N^2)에 정당성은 확인이 가능할거고,

말씀하신대로 음수로 가는건 당연히 비효율적일텐데 100000을 넘어가는건 가능할수도 있지 않냐하는 생각이 들 수도 있습니다.

그런데 i) +1로 100000을 탈출하는건 당연히 비효율적이고

ii) x2로 100000을 탈출한다면 언젠가는 -1을 해야할거고, 그러면 사실 -1을 먼저하고 x2를 해서 100000 안에 계속 머무는게 횟수를 줄이는 관점에서 더 도움이 될테니 결론적으로 이동 범위를 100000으로 제한해놓고 계산해도 답이 잘 나온다고 대략적으로 생각을 했습니다.

ii)에서 적은 논리의 유일한 고려사항은 x2를 한 후 -1을 딱 1번만 하는 경우가 최적해인 상황인데, 수의 범위가 짝수일 때에는 다행히 문제가 되지 않습니다만 적으신대로 100000이 아니라 15와 같은 홀수였다면 반례가 쉽게 나옵니다.

개인적으로 생각할 때에는, 이게 논리적으로 생각하니 100000 안에서 움직여도 답이 잘 나오는 상황이었지만 문제를 푸는 입장에서는 적어도 음수로 넘어갈 일은 없다 / 200000을 넘어갈 일은 없다 까지만 관찰한 후 0에서 200000을 범위로 두고 풀이를 하는게 조금 더 자연스러웠을 것 같습니다.

kuidoli   2년 전

두분 모두 답변 감사드립니다.

짝수, 홀수로는 생각을 못했는데 새롭게 생각해볼 수 있었습니다.

또한 방문 가능한 최대 범위에 대해서도 다시 고려해보게 됐습니다.

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