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

mhyim님의 프로필 이미지
mhyim

작성한 질문수

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

6-J

6-J ret-1 관련 질문 드립니다.

작성

·

168

·

수정됨

1

큰돌님 안녕하세요?

 

http://boj.kr/bf56f9dfa3334722b3c4d22ac01f67da

저는6-J 해당 문제에서

ret=60000000004로 설정하고

이분탐색에서

ret = min(ret, mid);

으로 최적의 ret을 찾는 방법을 사용하고 싶은데요,

강의의 ret-1이 저는 아직 이해가 안가서 질문 드립니다.

 

Q1. 해설에서는 ret=0;으로 설정하고 이분탐색에서

ret=mid;

로 min()함수 없이 사용하셨는데 상관 없는건가요?

 

Q2.강의 8:16초 28명과 35명 중에서 35명를 찾는 과정을 먼저 한다고 하셨는데

최적의 ret(mid)인 35 찾는건 이해했는데

ret-1코드로 인해 (해설 코드 26 line, 또는 강의 7분 54초 부분)

28부터 시작하는게 아니라 34(35-1은 34이므로)부터 하는것 아닌가요?

이부분 궁금해서 질문 드립니다.

 

답변 미리 감사합니다.

수강자 올림.

답변 2

1

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

안녕하세요 mh님 ㅎㅎ

 

Q1. 해설에서는 ret=0;으로 설정하고 이분탐색에서

>> 넵 상관없습니다. 다만 최댓값 -> 적절한 최솟값을 찾아도 됩니다.

로직을 보시면 min을 안넣더라도 "이상이라면 -> hi를 mid - 1로 하면서 최대 범위를 줄이게 되서 -> 적절한 최솟값"이 되게 합니다.

 

28부터 시작하는게 아니라 34(35-1은 34이므로)부터 하는것 아닌가요?

>>

	ll temp= M;
	for(ll i = 0; i < M; i++) temp += ((ret - 1) / a[i]); 

코드보시면 temp를 만들기 위해 ret - 1을 계속 더한다. -> 35에서 28같은 것을 만든다. (그냥 ret을 더했다면 35였음) 라는 의미입니다.

 

감사합니다.

mhyim님의 프로필 이미지
mhyim
질문자

조금 곱씹으면 이해가 완전히 될 것 같습니다 ㅎㅎ

시간 내서 답변해주셔서 감사합니다

0

안녕하세요, 인프런 AI 인턴입니다.

mhyim님의 질문에 대하여, 이전에 드린 비슷한 질문에 대한 답변이 도움이 될 것 같습니다.

  1. ret - 1 관련 질문에 대한 해설이 포함되어 있는 내용입니다. 본질적으로 ret-1을 통해 이전 시간을 찾아 특정 조건을 판단하는 로직이며, 이는 이분탐색 과정에서 최적의 시간을 결정하기 위해 사용됩니다. 질문하신 Q1에 대한 답변으로, ret = min(ret, mid); 방식과 ret=mid; 방식 중 적합한 방법을 선택하는 것은 문제를 해결하는 전략에 따라 다를 수 있으며, 주어진 문제의 특성과 코드의 로직을 고려하여 결정하게 됩니다. 주로 min() 함수를 통해 목표치와 실제 값 사이의 최소 거리를 찾는 경우가 많습니다.

  2. Q2와 관련하여, ret-1을 사용하는 부분은 특정 시간에서의 가능한 상태를 확인하기 위해 한 단계 뒤로 가서 검증하는 과정입니다. 이는 시간 경과에 따른 변화를 파악하고, 정확한 시점에서의 사건 발생 여부를 체크하기 위한 것입니다. 실제로 이런 방식은 이분탐색 문제에서 매우 유용하게 사용됩니다.

비슷한 문제 해설에 대한 내용은 다음 링크를 참고하시기 바랍니다:

이 링크에는 ret-1 사용 및 이분탐색 로직에 대한 구체적인 설명이 포함되어 있으니 참고하시면 문제해결에 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

mhyim님의 프로필 이미지
mhyim

작성한 질문수

질문하기