TIL 38. CodeKata-Python 3週目コメント
1.🤯 複素数を掛ける
1-1. 質問する
2つの入力は、文字列形式で1つの複素数(複素数)を与えます.複素数はa+bi形式の実数と虚数である.
受け取った2つの数にinputを乗じて返してください.
返される表現も複数形の文字列でなければなりません.
複数定義により、(i^2)は-1なので(i^2)の場合は-1で計算してください.(i * i = -1)
iの2平方(i^2)を平方で表すことはできません.Input: "1+1i", "1+1i" Output: "0+2i"
설명: (1 + i) * (1 + i) = 1 + i + i + i^2 = 2i
2i를 복소수 형태로 바꾸면 0+2i
Input: "1+-1i", "1+-1i" Output: "0+-2i"
설명: (1 - i) * (1 - i) = 1 - i - i + i^2 = -2i
-2i를 복소수 형태로 바꾸면 0+-2i.
Input: "1+3i", "1+-2i" Output: "7+1i"
설명: (1 + 3i) * (1 - 2i) = 1 - 2i + 3i -6(i^2) = 1 + i + 6
7+i를 복소수 형태로 바꾸면 7+1i.
Input: "1+1i", "1+1i" Output: "0+2i"
설명: (1 + i) * (1 + i) = 1 + i + i + i^2 = 2i
2i를 복소수 형태로 바꾸면 0+2i
Input: "1+-1i", "1+-1i" Output: "0+-2i"
설명: (1 - i) * (1 - i) = 1 - i - i + i^2 = -2i
-2i를 복소수 형태로 바꾸면 0+-2i.
Input: "1+3i", "1+-2i" Output: "7+1i"
설명: (1 + 3i) * (1 - 2i) = 1 - 2i + 3i -6(i^2) = 1 + i + 6
7+i를 복소수 형태로 바꾸면 7+1i.
inputは常にa+bi形式である.outputもa+biの形で現れなければならない.
1-2. に答える
def complex_number_multiply(a, b):
a_nums = a[:-1].split("+")
b_nums = b[:-1].split("+")
a1 = int(a_nums[0])
a2 = int(a_nums[1])
b1 = int(b_nums[0])
b2 = int(b_nums[1])
x = (a1*b1)-(a2*b2)
y = (a2*b1)+(a1*b2)
return f'{x}+{y}i'
a+bi形態ではaとbをそれぞれ探し出し,整数にする.
最終的に返される複素数をx+y形式とする.
(a 1 x b 1)−(a 2 x b 2)はxである.
a 2とb 2は後ろにiがいる子で、iに-1を乗じる
(a 2 x b 1)+(a 1 x b 2)はyである.
a 2とb 2は後ろのiがつながっている子で、iが乗っている場合ではないので、計算すればいいです.
2.テキストの反転
2-1. 質問する
文字で構成された配列をinputで伝える場合は、文字を逆に戻してください.
新しいシナリオは宣言できません.
受信したパラメータ配列を変更してください.Input: ["h","e","l","l","o"]
Output: ["o","l","l","e","h"]
Input: ["H","a","n","n","a","h"]
Output: ["h","a","n","n","a","H"]
2-2. に答える
def reverse_string(s):
return s[::-1]
# 배열이 아닌 문자열을 그대로 뒤집을때
def reverse_string(s):
return "".join(reversed(s))
Input: ["h","e","l","l","o"]
Output: ["o","l","l","e","h"]
Input: ["H","a","n","n","a","h"]
Output: ["h","a","n","n","a","H"]
def reverse_string(s):
return s[::-1]
# 배열이 아닌 문자열을 그대로 뒤집을때
def reverse_string(s):
return "".join(reversed(s))
シート増幅(step)を-1としてシーケンスオブジェクトを反転します.
文字列を完全に反転すると、->逆()の逆ループ反復器が返され、joinを使用して各要素がマージされます.
3. 🤯 m xnグリッドでのルーティング
3-1. 質問する
パラメータとして正のmxnグリッドを使用します.上から左へ、下から右へ行く道のすべての要素を加える場合は、最小の和を見つけて返します.
1つのポイントでのみ右または下に移動できます.Input: [ [1,3,1],
[1,5,1],
[4,2,1] ]
Output: 7
説明:1→3→1→1→1→1→1の和最小
3-2. に答える def min_path_sum(grid):
n = len(grid[0]) # 가로길이
m = len(grid) # 세로길이
# 첫번째 가로와 첫번째 세로줄을 통해 올때
for i in range(1, n):
grid[0][i] += grid[0][i-1]
for i in range(1, m):
grid[i][0] += grid[i-1][0]
# 나머지 경우 (안쪽으로 오는 경로)
for i in range(1, m):
for j in range(1, n):
grid[i][j] += min(grid[i-1][j], grid[i][j-1])
return grid[-1][-1]
パラメータとして正のmxnグリッドを使用します.上から左へ、下から右へ行く道のすべての要素を加える場合は、最小の和を見つけて返します.
1つのポイントでのみ右または下に移動できます.
Input: [ [1,3,1],
[1,5,1],
[4,2,1] ]
Output: 7
説明:1→3→1→1→1→1→1の和最小3-2. に答える def min_path_sum(grid):
n = len(grid[0]) # 가로길이
m = len(grid) # 세로길이
# 첫번째 가로와 첫번째 세로줄을 통해 올때
for i in range(1, n):
grid[0][i] += grid[0][i-1]
for i in range(1, m):
grid[i][0] += grid[i-1][0]
# 나머지 경우 (안쪽으로 오는 경로)
for i in range(1, m):
for j in range(1, n):
grid[i][j] += min(grid[i-1][j], grid[i][j-1])
return grid[-1][-1]
def min_path_sum(grid):
n = len(grid[0]) # 가로길이
m = len(grid) # 세로길이
# 첫번째 가로와 첫번째 세로줄을 통해 올때
for i in range(1, n):
grid[0][i] += grid[0][i-1]
for i in range(1, m):
grid[i][0] += grid[i-1][0]
# 나머지 경우 (안쪽으로 오는 경로)
for i in range(1, m):
for j in range(1, n):
grid[i][j] += min(grid[i-1][j], grid[i][j-1])
return grid[-1][-1]
最初はgrid[0][0]、最後はgrid[1][-1]
通過するすべての要素を追加し、座標を移動します.
移動は右(横)または下(縦)のみです.
一番上の線と一番左の線が最後まで移動すると一方向になり、また和を求めます.
奥に進むと、どの経路を通るかによって最小総和を探します.
4.アレイの後ろに特定の要素を送信
4-1. 質問する
指定した数値配列で、0を配列の最後に移動します.元の数字の順番を変えないでください.
新しいアレイは作成しないでください.Input: [0,1,0,3,12]
Output: [1,3,12,0,0]
4-2. に答える def move_zeroes(nums):
for i in range(len(nums)):
if nums[i] == 0:
nums.append(nums[i])
nums.remove(nums[i])
return nums
指定した数値配列で、0を配列の最後に移動します.元の数字の順番を変えないでください.
新しいアレイは作成しないでください.
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]
4-2. に答える def move_zeroes(nums):
for i in range(len(nums)):
if nums[i] == 0:
nums.append(nums[i])
nums.remove(nums[i])
return nums
def move_zeroes(nums):
for i in range(len(nums)):
if nums[i] == 0:
nums.append(nums[i])
nums.remove(nums[i])
return nums
0を含むインデックスを見つけます.
配列の追加()と削除()
->removeは最初の値のみを削除するので可能です.
先に削除するとインデックスが違います.
5.再帰関数によるファクトリの作成
5-1. 質問する
再帰実装求実関数を使用してください.工場は1からnまでの整数の積です.1! = 1
2! = 1 * 2
5! = 1 * 2 * 3 * 4 * 5
5-2. に答える def factorial(n):
if n == 1 or n == 0:
return 1
return n * factorial(n-1)
再帰実装求実関数を使用してください.工場は1からnまでの整数の積です.
1! = 1
2! = 1 * 2
5! = 1 * 2 * 3 * 4 * 5
5-2. に答える def factorial(n):
if n == 1 or n == 0:
return 1
return n * factorial(n-1)
def factorial(n):
if n == 1 or n == 0:
return 1
return n * factorial(n-1)
1! レッスン0の値は1です.
nが1になるまで関数(factorial(1)を呼び出し続けます.
最後のコールから戻り始め、戻りを開始します.
注意:符号化スタンプ再帰関数ファクトリ解析
Reference
この問題について(TIL 38. CodeKata-Python 3週目コメント), 我々は、より多くの情報をここで見つけました https://velog.io/@palza4dev/TIL-38.-CodeKata-Python-3주차-리뷰テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol