[programmers][Python]スポーツウェア
7169 ワード
質問する
に答える
Trual 1 stプール
def solution(n, lost, reserve):
for ans in lost:
if ans-1 in reserve:
reserve.remove(ans-1)
elif ans+1 in reserve:
reserve.remove(ans+1)
else:
n-=1
return n
最初は、すべての状況で完璧な解を見つけたいと思っていましたが、この問題はgreedyの方法で解決する必要があることに気づき、一歩一歩最適な解を求める方法を採用しました.
Trual 1 stプール
def solution(n, lost, reserve):
for ans in lost:
if ans-1 in reserve:
reserve.remove(ans-1)
elif ans+1 in reserve:
reserve.remove(ans+1)
else:
n-=1
return n
最初は、すべての状況で完璧な解を見つけたいと思っていましたが、この問題はgreedyの方法で解決する必要があることに気づき、一歩一歩最適な解を求める方法を採用しました.Trial 1結果
いくつかのテックに失敗した.
探していたのかもしれませんが、もう一度問題を見て、制限事項で見逃した部分を見つけました.
もっと賢い方法があるかどうか調べてみると、Pythonには生成者
set
がいることがわかりました.s1 = {} #set 선언
s2 = {1, 2, 3, 4} #set에 원소 넣기
s2 = set(list1) #list를 set으로 변경
s3 = set([1, 2, 3]) #set에 list 넣기
ジャンプ 集合の演算子は、集合、交差、差分、対称差分をサポートする名前で実装されます.
繰り返し要素(繰り返し入力自動消去)は許可されず、順序は保存されていないため、forゲートを回転するのはどこから始まるか分かりません.
この問題ではset演算子の差分(-)機能を用いると,オーバーラップした要素を迅速に除去でき,O(1)ターンゲートを用いるよりも時間的複雑度がはるかに速い.△与えられた学生数は30を超えないので、本題でfor文を使っても大きな問題はありません.
diff_lost = set(lost) - set(reserve)
diff_reserve = set(reserve) - set(lost)
Trual 2 ndプール
def solution(n, lost, reserve):
diff_lost = set(lost) - set(reserve)
diff_reserve = set(reserve) - set(lost)
for ans in diff_lost:
if ans-1 in diff_reserve:
diff_reserve.remove(ans-1)
elif ans+1 in diff_reserve:
diff_reserve.remove(ans+1)
else:
n-=1
return n
結果は成功!Reference
この問題について([programmers][Python]スポーツウェア), 我々は、より多くの情報をここで見つけました https://velog.io/@bae12/ProgrammersLevel1Python체육복テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol