[プログラマー]入国審査
4036 ワード
https://programmers.co.kr/learn/courses/30/lessons/43238
初めて問題を見たとき、どうしてこの人を探したのですか.ちょっと悩んだ
入力データが10000000である可能性がある場合、完全検出を行うとすぐにタイムアウトすると判断します.
さらに1000000*10000000を格納する数も考慮したが、Pythonの整数範囲は-922337203685475808~922337203685475807であることが分かった.
次のように2つのアイデアがあります.ビット探索:時間のかかる候補群から最小の正解を選択する.(これを二分探索法とする)候補群が正解の関数になるか否かを判断する必要がある. 候補軍が正解になるかどうかの判断部分は思い出せないが、審査員一人一人がその時間帯に何人もらえるかを考慮し、その積算値に人数を含めると、その時間が正解になる.
△例えば、30時間で6人全員がもらえることを考えれば、7-審査員は最大4人、10-審査員は最大3人までもらえるので、7人までカバーできる.
https://technote.kr/183
初めて問題を見たとき、どうしてこの人を探したのですか.ちょっと悩んだ
入力データが10000000である可能性がある場合、完全検出を行うとすぐにタイムアウトすると判断します.
さらに1000000*10000000を格納する数も考慮したが、Pythonの整数範囲は-922337203685475808~922337203685475807であることが分かった.
次のように2つのアイデアがあります.
△例えば、30時間で6人全員がもらえることを考えれば、7-審査員は最大4人、10-審査員は最大3人までもらえるので、7人までカバーできる.
from functools import reduce
def check(mid, times, n):
if n <= reduce(lambda acc, cur: acc + int(mid / cur), times, 0):
return True
return False
def solution(n, times):
answer = 0
max_num = max(times)
left = 0
right = max_num * n
while left < right:
mid = int((left + right) / 2)
if check(mid, times, n):
answer = mid
right = mid
else:
left = mid + 1
return answer
Reference
https://technote.kr/183
Reference
この問題について([プログラマー]入国審査), 我々は、より多くの情報をここで見つけました https://velog.io/@ganta/프로그래머스입국심사テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol