プログラマー-橋を渡る(2019ココア開発者冬季実習)
1811 ワード
プログラマー-橋を渡る(2019ココア開発者冬季実習)
https://programmers.co.kr/learn/courses/30/lessons/64062
こちらの探索で近づいてきましたが、正確性しか通らず・・理由は、通過可能な人を特定し、その人がすべて通過できるかどうかをチェックするため、次のコードを使用しているからです.
## 해당인원 모두 건널수 있는지 체크
def check(stones,k):
now_idx = 0
while 1:
flag = 0
if now_idx >= len(stones):
break
if stones[now_idx] == 0:
for i in range(k):
flag = 0
tmp_idx = now_idx+i
if tmp_idx >= len(stones):
return True
elif stones[tmp_idx] != 0:
#stones[tmp_idx]-=1
now_idx = tmp_idx
break
flag = 1
if flag == 1:
return False
elif stones[now_idx] >0:
stones[now_idx]-=1
now_idx+=1
return True
このチェックしたコードは効率的ではありません.どうしても方法が思いつかず、解説を見るとチェックの論理が斬新だと思います.各位置の石からmid(越えられる人)を減算し、何個の0が生成されたかを確認し、生成された0がk以上であれば越えられない.合格できない人であれば、最大値を更新し、できれば最小値を更新し、答えに最大値を加えることができます.コード#コード#
def solution(stones, k):
answer = 0
left = 1
right = 200000000
while left <= right:
#건널 수 있는 사람
mid = (left + right) //2
zero_block_cnt = 0
for stone in stones:
if stone - mid <=0:
zero_block_cnt +=1
else:
zero_block_cnt = 0
if zero_block_cnt >= k:
break
if zero_block_cnt >= k:
right = mid -1
continue
left = mid +1
answer = left
return answer
Reference
この問題について(プログラマー-橋を渡る(2019ココア開発者冬季実習)), 我々は、より多くの情報をここで見つけました https://velog.io/@beomsun/프로그래머스-징검다리-건너기2019-카카오-개발자-겨울-인턴십テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol