두 개의 input에는 복소수(complex number)가 string 으로 주어집니다. 복소수란 a+bi 의 형태로, 실수와 허수로 이루어진 수입니다.
input으로 받은 두 수를 곱해서 반환해주세요.
반환하는 표현도 복소수 형태의 string 이어야 합니다.
복소수 정의에 의하면 (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.
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+yi 형태인 것으로 가정한다.
(a1 x b1)-(a2 x b2)는 x가 된다.
a2와 b2는 뒤에 i가 붙어있는 애들이며 i끼리 곱하면 -1이된다
(a2 x b1)+(a1 x b2)는 y가 된다.
a2와 b2는 뒤에 i가 붙어있는 애들이며 i끼리 곱해지는 경우가 아니므로 그대로 계산하면 된다.
문자로 구성된 배열을 input으로 전달하면, 문자를 뒤집어서 return 해주세요.
새로운 배열을 선언하면 안 됩니다.
인자로 받은 배열을 수정해서 만들어주세요.
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로해서 시퀀스 객체를 뒤집는다.
문자열을 그대로 뒤집을때 -> reversed()로 반대방향으로 순회하는 iterator를 리턴하고, join으로 각 요소를 합친다.
양수로 이루어진 m x n 그리드를 인자로 드립니다. 상단 왼쪽에서 시작하여, 하단 오른쪽까지 가는 길의 요소를 다 더했을 때,가장 작은 합을 찾아서 return 해주세요.
한 지점에서 우측이나 아래로만 이동할 수 있습니다.
Input: [ [1,3,1],
[1,5,1],
[4,2,1] ]
Output: 7
설명: 1→3→1→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]
지나가는 요소를 모두 더하며 좌표를 이동한다.
이동은 오른쪽(가로)이나 아래(세로)로만 한다.
가장 윗줄과 가장 왼쪽줄은 끝까지 이동할때 한방향이어서 따로 합을 구해준다.
안쪽으로 들어오는 경우 어느 경로를 통해 오느냐에 따라 최소합계를 찾는다.
주어진 숫자 배열에서, 0을 배열의 마지막쪽으로 이동시켜주세요. 원래 있던 숫자의 순서는 바꾸지 말아주세요.
새로운 배열을 생성해서는 안 됩니다.
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]
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이 있는 인덱스를 알아내서
배열에 append()하고 remove()를 한다
-> remove는 첫번째 값만 지우니까 가능하다.
먼저 지우면 인덱스가 달라져서 안된다.
재귀를 사용하여 팩토리얼(factorial)을 구하는 함수를 구현해주세요. 팩토리얼이란 1에서부터 n까지의 정수를 모두 곱한것을 말합니다.
1! = 1
2! = 1 * 2
5! = 1 * 2 * 3 * 4 * 5
def factorial(n):
if n == 1 or n == 0:
return 1
return n * factorial(n-1)
1! 과 0!의 값은 1이다.
n이 1이 될때까지(factorial(1)) 함수를 계속 호출한다.
마지막 호출부터 되돌아오며 반환을 시작한다.
참고 : 코딩도장 재귀함수 팩토리얼 풀이