整数降順で配列[アルゴリズム]
※この写真と投稿内容の問題は、ProgrammersのWebサイトから抜粋しています.
に質問 함수 solution은 정수 n을 매개변수로 입력받습니다.
n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요.
예를들어 n이 118372면 873211을 리턴하면 됩니다.
제한 조건 : n은 1이상 8000000000 이하인 자연수입니다.
<입출력 예>
n | return
118372 | 873211
ほどく
My Code
def solution(n):
str_n = list(str(n))
sort_n = sorted(str_n, reverse=True)
answer = int(''.join(sort_n))
return answer
このアルゴリズムは、段階的および順序的な計算によって展開されません.
Python内蔵関数sorted()
関数を使用しました.str()
入力値を関数で文字列に変換します.list()
関数によりstr nという変数には、入力した数字の各桁数が文字列で構成されたリストが含まれます.
私たちは上の過程で数字を1つずつ分けます.
数値が文字列になってもintデータと同じサイズ関係になります.sorted()
という名前の関数でソートし、reverse=True
という名前のパラメータ値を入力します.
降順で返す.
その後、''.join(sort_n)
で並べ替えられた数字を集計した.
コマンドは、スペース''
.join([List])
です.
説明する
(1)def merge(left, right):
result = []
while len(left) > 0 or len(right) > 0:
if len(left) > 0 and len(right) > 0:
if left[0] >= right[0]:
result.append(left[0])
left = left[1:]
else:
result.append(right[0])
right = right[1:]
elif len(left) > 0:
result.append(left[0])
left = left[1:]
elif len(right) > 0:
result.append(right[0])
right = right[1:]
return result
def mergeSort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left = arr[:mid]
right = arr[mid:]
left = mergeSort(left)
right = mergeSort(right)
return merge(left, right)
def solution(n):
arr = list(str(n))
n = int(''.join(mergeSort(arr)))
return n
長いですが、このような過程で分析するのはかっこいいようです.
この誠実さと根性は本当に素晴らしいと思います.
まず、構成を見てみましょう.3つの関数を定義して、順番に見てみましょう.
先頭に立つmerge(left, right)
関数;
resultは「空のリスト」を宣言します.while len(left) > 0 or len(right) > 0 :
はlen()
関数に設定されます.
リストや文字列などの変数を受信し、入力した2つの値のうち1つの値の長さを0とするループ文が設定されています.
その後3つの条件を書きました.
함수 solution은 정수 n을 매개변수로 입력받습니다.
n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요.
예를들어 n이 118372면 873211을 리턴하면 됩니다.
제한 조건 : n은 1이상 8000000000 이하인 자연수입니다.
<입출력 예>
n | return
118372 | 873211
My Code
def solution(n):
str_n = list(str(n))
sort_n = sorted(str_n, reverse=True)
answer = int(''.join(sort_n))
return answer
このアルゴリズムは、段階的および順序的な計算によって展開されません.Python内蔵関数
sorted()
関数を使用しました.str()
入力値を関数で文字列に変換します.list()
関数によりstr nという変数には、入力した数字の各桁数が文字列で構成されたリストが含まれます.私たちは上の過程で数字を1つずつ分けます.
数値が文字列になってもintデータと同じサイズ関係になります.
sorted()
という名前の関数でソートし、reverse=True
という名前のパラメータ値を入力します.降順で返す.
その後、
''.join(sort_n)
で並べ替えられた数字を集計した.コマンドは、スペース
''
.join([List])
です.説明する
(1)
def merge(left, right):
result = []
while len(left) > 0 or len(right) > 0:
if len(left) > 0 and len(right) > 0:
if left[0] >= right[0]:
result.append(left[0])
left = left[1:]
else:
result.append(right[0])
right = right[1:]
elif len(left) > 0:
result.append(left[0])
left = left[1:]
elif len(right) > 0:
result.append(right[0])
right = right[1:]
return result
def mergeSort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left = arr[:mid]
right = arr[mid:]
left = mergeSort(left)
right = mergeSort(right)
return merge(left, right)
def solution(n):
arr = list(str(n))
n = int(''.join(mergeSort(arr)))
return n
長いですが、このような過程で分析するのはかっこいいようです.この誠実さと根性は本当に素晴らしいと思います.
まず、構成を見てみましょう.3つの関数を定義して、順番に見てみましょう.
先頭に立つ
merge(left, right)
関数;resultは「空のリスト」を宣言します.
while len(left) > 0 or len(right) > 0 :
はlen()
関数に設定されます.リストや文字列などの変数を受信し、入力した2つの値のうち1つの値の長さを0とするループ文が設定されています.
その後3つの条件を書きました.
if len(left) > 0 and len(right) > 0 :
(両方の値の長さが0より大きい場合)-
if left[0] >= right[0] :
(左の最初の値が右の最初の値より大きいか等しい場合):結果リストにleft値を追加し、leftを最初の値の後の値を含むリストとして再宣言します.
else
上記の手順をrightに変換して、同じ操作を実行します.elif len(left) > 0 :
(左の値が0より大きい場合のみ)->1番の内部条件文の"if
式"elif len(right) > 0 :
(右が0より大きい場合のみ)->1番内部条件文の「else
式」2番目の関数は
mergeSort(arr)
.変数名から行列データを直感的に得ることができる.
(最後の
solution
関数の式を参照してください.低arrに入力された数値list(str())
で文字列リストになります.)😁)最初の条件式は
if len(arr) <= 1 : return arr
で、1桁の場合にすぐに返されるコマンドです.適用されない場合
優先順位
midという変数では、
(입력된 값의 자릿수) // 2
で中央位置の数字のインデックス値を指定します.次にleftとrightという変数に中心で区切られたリストを追加し、
実行関数自体の再帰式を記述した.完了
return merge(left, right)
このようにして最初の条件式まで繰り返します.先に宣言した
merge(left,right)
に戻る各ステップのみがソートされ、実行関数として繰り返されるmerge()
がマージソートされ、最後に完了した降順ソートリストが得られる.最後は3番目の関数で、柵のような大きなフレーム関数でもあります.
solution
関数を使用して入力値を文字列リストに設定上記の手順を実行して、インポートした降順ソートリストを
int(''.join(mergeSort(arr)))
に再結合し、整数値に変換して返します.(2)
def solution(n):
ls = list(str(n))
ls.sort(reverse = True)
return int("".join(ls))
これは、私が使用している独立した関数sorted()
ではなく、リスト継承関数.sort()
関数を使用するプールです.逆方向に配置するreverse=True
は、リスト要素をマージする"".join()
と同じです.プロセスが短縮され、より清潔な姿が印象的でした.
Reference
この問題について(整数降順で配列[アルゴリズム]), 我々は、より多くの情報をここで見つけました https://velog.io/@yummygyudon/알고리즘-정수-내림차순으로-배치テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol