[プログラマー]貪欲法(Greedy)-管制カメラ(Level 3)
1079 ワード
せいぎょカメラ
解法のカメラは、設置されたカメラを最小限に抑えるために、できるだけ多くの車両が必要です. の路線リストを進入地点を基準に並べ替えます. カメラは、最も多くの車両に遭遇する区間の始点と終点をstart変数とend変数としてそれぞれ記憶する.start変数は−30000に初期化され、end変数は30000に初期化された. 路線リストを送信します.startを現在の車両の進入点に更新します.この更新のstartがendより大きい場合、1つのカメラで上書き可能な区間が終了するので、答えに1を加え、endを現在の車両のインバウンドサイトに更新します.そうでなければ、endは、現在の車両のインバウンドがendより小さい場合にのみ、現在の車両のインバウンドに更新される.最後の段落にカメラが付いていない部分があるので、回答ではプラス1の値を返します.
ex.ルーティング=[-20,15],[-18,13],[-14,-5],[-5,3]の場合、カメラを取り付ける必要がある区間は[14,-13],[-5,3]である.上記のように[14,-13]区間を求め,for文が[-5,3]車両に移行すると,1つのカメラで上書きすることができなくなるため,答えに1を加える.[-5,3]車両の次の車両がないため、for文では[-5,3]セグメント追加カメラの部分は実行されないので、最後に答えに1を追加します. Python Code
集合オーバーライド問題を用いて解いてみたがタイムアウトしたのでfor文の上の方法を変えた.
解法
ex.ルーティング=[-20,15],[-18,13],[-14,-5],[-5,3]の場合、カメラを取り付ける必要がある区間は[14,-13],[-5,3]である.上記のように[14,-13]区間を求め,for文が[-5,3]車両に移行すると,1つのカメラで上書きすることができなくなるため,答えに1を加える.[-5,3]車両の次の車両がないため、for文では[-5,3]セグメント追加カメラの部分は実行されないので、最後に答えに1を追加します.
def solution(routes):
answer = 0
routes.sort(key=lambda x:x[0])
print(routes)
start = -30000
end = 30000
for i in routes:
start = i[0]
if start>end:
answer += 1
end = i[1]
if i[1]<end:
end = i[1]
return answer+1
エラーと解決集合オーバーライド問題を用いて解いてみたがタイムアウトしたのでfor文の上の方法を変えた.
Reference
この問題について([プログラマー]貪欲法(Greedy)-管制カメラ(Level 3)), 我々は、より多くの情報をここで見つけました https://velog.io/@imyo/프로그래머스-탐욕법Greedy-단속카메라-Level-3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol