인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

연습생님의 프로필 이미지

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

3-H

숨바꼭질 문제들의 범위에 반복되는 질문에 대한 생각

해결된 질문

작성

·

52

·

수정됨

0

안녕하세요 😃 큰돌님

저 또한 이 문제의 범위에 대해 궁금증이 생겨 여러 질문글 (숨바꼭질2에서 기존 10만대로 잡아져있는 다른 숨바꼭질 문제에 대한 것의 범위가 잘못된것 아닌가요라는 질문 등) 을 보던 중 질문에 대한 답변 중 최단거리로만 생각하면 안되기에 20만으로 잡아야 한다라는 답변이 이해가 가지 않아 질문을 드립니다

어떻게 보면 질문도 이해가 가고 답변도 이해가 가고 서로 다 맞는 말씀을 하시는 것 같은데... 관련된 이야기들이 많아서 제 생각을 정리해 보자면


지금까지 이해한 바로는 핵심은 이것입니다
x2로 범위를 탈출하고 -1을 가는 것보다 -1을 먼저하고 x2를 하는 것이 더 나은데 더 넓은 범위까지 잡아줘야 하는가?
예를 들어:

  • 수빈이의 위치가 50,001이고 동생의 위치가 99,999일 때:

    • 50,000 → 100,000 → 99,999 (3단계)

    • 이는 100,002 → 100,001 → 100,000 → 99,999 (4단계)보다 효율적입니다.

이 예시는 항상 범위 내에서 최적의 해법을 찾을 수 있음을 보여줍니다

그렇다면 문제에서 요구하는 정답은 10만 범위 안에서만 이동하는게 나으므로 강의에서 말씀하신 범위를 넘는 경우의 수가 있긴 하나 굳이 갈 이유가 없기에 해당 경우의 수는 제외해도 된다로 저는 이해를 했습니다

30만으로 가도되지만 30만으로 가는 것은 가장 빠른 거리일 수가 없기 때문에 고려하지 않는 것처럼요


따라서 제가 이해한 바로 내린 결론은 배우는 입장에서는 단순히 입력값의 범위가 10만으로 주어져 10만으로만 생각했다가 운좋게 넘어가는 경우가 있을 것이기에 다른 경우의 수를 생각하는 것이 좋으니 해당 포인트를 강조하는게 맞지만 다음으로 깊게 생각을 해본 단계에 이르렀다면 이 문제는 사실 10만이 넘게 잡지 않아도 된다라고 보는게 맞지 않는가? 입니다

답변 1

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 연습생님 ㅎㅎ

문제지문을 기반으로 범위를 산정할 때는 가능한 경우의 수를 생각해봐야 합니다.

10만에서 *2를 하면 20만이고 20만까지는 문제에서 허용하는 "갈 수 있는" 범위입니다.

때문에 20만으로 잡아야 합니다.

 

  • 이는 100,002 → 100,001 → 100,000 → 99,999 (4단계)보다 효율적입니다.

x2로 범위를 탈출하고 -1을 가는 것보다 -1을 먼저하고 x2를 하는 것이 더 나은데 더 넓은 범위까지 잡아줘야 하는가?

-> 네 저도 그렇게 생각합니다. 그러나 우리는 문제 내의 private TC들을 가늠하긴 하나 정확하게 알지는 못합니다.

예를 들어 10만 2000까지 2배씩 빠르게 갔다가 1씩 -해서 동생위치인 10만까지 가는 경우의 수도 있을 수 있겠죠?

그렇기 때문에 문제에서 가능한 경우의 수중 최대범위로 잡아야 합니다.

 


또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.