[programmers/CodingTest/Python]大数を作成
3931 ワード
問題の説明
ある数字からk個の数字を削除しようとしたときに得られる最大の数字を取得しようとします.
たとえば、2つの数字が1924から削除された場合、[19,12,14,14,92,94,24]を作成することができる.このうち最大の数字は94です.
解関数のパラメータとして文字列形式で与えられた数値と削除する数値kを用いる.solution関数を完了し、numberからk個の数値を削除したときに作成できる最大数値を文字列で返します.
せいげんじょうけん
I/O例
number k return
"1924" 2 "94"
"1231234" 3 "3234"
"4177252841" 4 "775841"
方法
最初に、i番号がi+1番より小さい場合は、i番号を削除するように記述される.しかしテストケースでは失敗し,様々な方法を考えているうちにスタックを使用するヒントを見つけた.
スタックに数字iの1番目の数字を入れ、スタックの-1番目の数字が数字iの1番目の数字以上になるまでスタックをポップアップします.このプロシージャはnumber全体を巡り、スタック内の数を文字列に結合して解決します.ここで、パージ数の個数がkより小さい場合は、スタックの[:-k]のみをとる.
->答えが空の場合は、答えにiを入れて次の繰り返しを行います.
->kが0より大きい場合、
-->答え[-1]がiより小さいときに繰り返し、ドアを回します.
----->答えをポップアップし、kを1に減らします.
----->答えが空、またはkが0未満の場合、while文を終了します.
->答えにiを入れる.
->回答に答えを更新します[:-k].
solution.py def solution(number, k):
answer = []
for i in number:
if not answer:
answer.append(i)
continue
if k>0:
while answer[-1]<i:
answer.pop()
k-=1
if not answer or k<=0:
break
answer.append(i)
if k>0:
answer=answer[:-k]
result=''.join(answer)
return result
Reference
この問題について([programmers/CodingTest/Python]大数を作成), 我々は、より多くの情報をここで見つけました
https://velog.io/@xx0hn/Programmers-CodingTest-Python-큰-수-만들기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
def solution(number, k):
answer = []
for i in number:
if not answer:
answer.append(i)
continue
if k>0:
while answer[-1]<i:
answer.pop()
k-=1
if not answer or k<=0:
break
answer.append(i)
if k>0:
answer=answer[:-k]
result=''.join(answer)
return result
Reference
この問題について([programmers/CodingTest/Python]大数を作成), 我々は、より多くの情報をここで見つけました https://velog.io/@xx0hn/Programmers-CodingTest-Python-큰-수-만들기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol