TIL 35. CodeKata-Python第2週コメント
1.アルファベットを数字に変換
1-1. 質問する
パラメータとして1~3999のアルファベットsを使用する場合は、対応する数値を返します.
ローマ数字を数字としてマークします.
SymbolValueI1V5X10L50C100D500M1000
ローマ字を数字で読む方法は、左からローマ字を順番に付けます.III = 3
XII = 12
XXVII = 27
でも4と9を表すときは後ろの数字から前の数字を外すといいです
4はIIIではなくIVです.
9はIXです.I는 V, X 앞에 와서 4, 9
X는 L, C 앞에 와서 40, 90
C는 D, M 앞에 와서 400, 900
1-2. に答える
def roman_to_num(s):
symbols = ['I', 'V', 'X', 'L', 'C', 'D', 'M']
value = [1, 5, 10, 50, 100, 500, 1000]
result = 0
for i in range(len(symbols)):
result += s.count(symbols[i]) * value[i]
if i % 2 == 0 and i < 6:
result -= s.count(symbols[i] + symbols[i+1]) * value[i] * 2
result -= s.count(symbols[i] + symbols[i+2]) * value[i] * 2
return result
III = 3
XII = 12
XXVII = 27
I는 V, X 앞에 와서 4, 9
X는 L, C 앞에 와서 40, 90
C는 D, M 앞에 와서 400, 900
def roman_to_num(s):
symbols = ['I', 'V', 'X', 'L', 'C', 'D', 'M']
value = [1, 5, 10, 50, 100, 500, 1000]
result = 0
for i in range(len(symbols)):
result += s.count(symbols[i]) * value[i]
if i % 2 == 0 and i < 6:
result -= s.count(symbols[i] + symbols[i+1]) * value[i] * 2
result -= s.count(symbols[i] + symbols[i+2]) * value[i] * 2
return result
同じインデックスを使用するために、シンボルと値を別々に並べます.
各シンボル要素の個数に対応する値を乗算し、値を加算します.
4と9を表す場合を除く.
->もし
I
・X
・C
先着(M
除く)->次の字や次の字と直接つながっていると
->valueに2を掛けて減算します.(本来はvalue値を減算するだけでしたが、結果値にvalueが加算されました)
2.配列の半数を超える数値の検索
2-1. 質問する
数値配列numsをパラメータとして渡します.
数字のうち半数を超える(多数、半を超える)数字を返してください.
たとえば、nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
アレイの長さが2より大きいと仮定します.
2-2. に答える
def more_than_half(nums):
set_nums = set(nums)
current = 0
for num in set_nums:
if current < nums.count(num):
current = nums.count(num)
result = num
# 과반수가 되지 않는 경우 예외처리
if current =< len(nums)/2:
return print("과반수가 안된다")
return result
nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
def more_than_half(nums):
set_nums = set(nums)
current = 0
for num in set_nums:
if current < nums.count(num):
current = nums.count(num)
result = num
# 과반수가 되지 않는 경우 예외처리
if current =< len(nums)/2:
return print("과반수가 안된다")
return result
どのようなタイプの要素があるかを知るために、
nums
set
タイプに変更します.各固有要素が
nums
配列のうちどれだけあるかを決定し、current
に組み込む.要素個数が
current
より大きい場合は、再度current
更新する.最大個数を持つ要素は更新されない
current
要素が返されます.過半数になるには、要素の個数が半分以上でなければならず、半分以下であれば認めない.
3. 🤯かっこが有効かどうかを確認
3-1. 質問する
sは、複数の括弧からなるStringパラメータである.true/false、sが有効かどうかを返してください.
「(」、「)」、「[」、「]」、「{」、「}」の6種類があります.
カッコが開始された場合は、同じカッコで終了し、カッコの順序が正しい必要があります.s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true
3-2. に答える
def is_valid(string):
finish = [')', ']', '}']
if len(string) % 2 == 1 or (string[0] in finish):
return False
for i in range(0,len(string)-1,2):
if string[i]==string[i+1]:
return True
else:
return False
s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true
def is_valid(string):
finish = [')', ']', '}']
if len(string) % 2 == 1 or (string[0] in finish):
return False
for i in range(0,len(string)-1,2):
if string[i]==string[i+1]:
return True
else:
return False
番号全体が奇数の場合、または最初の要素が括弧で囲まれている場合は、Falseを返して例外処理を行います.
0番のインデックスから2グリッドを移動し、次の要素と同じ値かどうかを比較します.
テストは合格しましたが、例外を考えてみましょう.
もしドアの中のifドアが本当なら、私たちは何とかして続けます.
わたしは本当のことを言っただけだから,ほかに方法があるに違いない.
4.配列によく現れる数字を返します
4-1. 質問する
numsは数字からなる配列です.
よくある順番に数字をk個返すnums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
4-2. に答える
def top_k(nums, k):
nums_set = set(nums)
nums_list = []
result = []
for num in nums_set:
nums_list.append((num, nums.count(num)))
nums_list.sort(key=lambda x: x[1], reverse=True)
for i in range(k):
result.append(nums_list[i][0])
return result
# sort 내부의 람다 함수
# def sort_second(x):
# return x[1]
nums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
def top_k(nums, k):
nums_set = set(nums)
nums_list = []
result = []
for num in nums_set:
nums_list.append((num, nums.count(num)))
nums_list.sort(key=lambda x: x[1], reverse=True)
for i in range(k):
result.append(nums_list[i][0])
return result
# sort 내부의 람다 함수
# def sort_second(x):
# return x[1]
要素や要素の登場回数をディック・シャナリとして記録したいのですが、並べ替えができないという問題もあります.
dickshernerの代わりにtupleを用いて並べ替え,
sort(key=func)
rotupleにより,tuple内部に近づいて並べ替えることができる.固有の要素のみを探すため、配列を
set
に変更します.nums_list
配列に含まれる(요소, 요소 등장 횟수)
トフ.sort()
方法、各図例において降順で並べ替え요소 등장 횟수
>Ramda式の使用k
番号に従い、各tupleの요소
をresult
に並べます.5.図形の最大面積を求める
5-1. 質問する
パラメータheightは数値からなる配列です.グラフィックで表すと、y軸の値であり、高さの値があります.
[1,8,6,2,5,4,8,3,7]を下図に示します.
サンプル写真
そのグラフに水があるとき、水を入れることができる最大面積の値を返してください.
アレイの長さが2より大きいと仮定します.
5-2. に答える
def get_max_area(height):
area = []
for i in range(len(height)):
for j in range(i+1,len(height)):
this_area = (j-i) * min(height[i],height[j])
area.append(this_area)
return max(area)
def get_max_area(height):
area = []
for i in range(len(height)):
for j in range(i+1,len(height)):
this_area = (j-i) * min(height[i],height[j])
area.append(this_area)
return max(area)
重複を避けるために、面積を求めるために2つの要素を選択します.
インデックスに準じて
j
無条件に比べるi
後なので横値はj-i
です.2つの要素の値のうち、1つの小さな値が縦の値になります.
すべての場合の面積値は配列に含まれます.
配列の最大値を返します.
Reference
この問題について(TIL 35. CodeKata-Python第2週コメント), 我々は、より多くの情報をここで見つけました https://velog.io/@palza4dev/TIL-00.-CodeKata-Python-2주차-리뷰テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol