[codekata]
codekata week3 day4
주어진 숫자 배열에서, 0을 배열의 마지막쪽으로 이동시켜주세요. 원래 있던 숫자의 순서는 바꾸지 말아주세요.
새로운 배열을 생성해서는 안 됩니다.
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]
def move_zeroes(nums):
length = len(nums)
num = 0
while num < length:
if nums[num] == 0:
nums.append(0)
nums.remove(0)
num += 1
return nums
codekata week3 day1
두 개의 input에는 복소수(complex number)가 string 으로 주어집니다. 복소수란 a+bi 의 형태로, 실수와 허수로 이루어진 수입니다.
input으로 받은 두 수를 곱해서 반환해주세요. 반환하는 표현도 복소수 형태의 string 이어야 합니다.
복소수 정의에 의하면 (i^2)는 -1 이므로 (i^2) 일때는 -1로 계산해주세요.
제곱 표현이 안 되어 i의 2제곱을 (i^2)라고 표현했습니다.
-
예제 1:
Input: "1+1i", "1+1i" Output: "0+2i" 설명: (1 + i) * (1 + i) = 1 + i + i + i^2 = 2i 2i를 복소수 형태로 바꾸면 0+2i.
-
예제 2:
Input: "1+-1i", "1+-1i" Output: "0+-2i" 설명: (1 - i) * (1 - i) = 1 - i - i + i^2 = -2i, -2i를 복소수 형태로 바꾸면 0+-2i.
-
예제 3:
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 형태로 나와야 합니다.
def complex_number_multiply(a, b):
m1, m2 = map(int, a[:-1].split('+'))
m3, m4 = map(int, b[:-1].split('+'))
s1 = m1*m3
s2 = (m1*m4)+(m2*m3)
s3 = -(m2*m4)
total =str(s1+s3)+'+'+str(s2)+'i'
return total
codekata week2 day2
숫자로 이루어진 배열인 nums를 인자로 전달합니다.
숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.
예를 들어,
-
nums = [3,2,3]
return 3 -
nums = [2,2,1,1,1,2,2]
return 2
def more_than_half(nums):
a = len(nums) / 2
for i in nums:
if nums.count(i) >= a:
return i
def more_than_half(nums):
a = max(set(nums), key = nums.count)
if nums.count(a) > len(nums)/2:
return a
codekata week2 day1
로마자에서 숫자로 바꾸기 1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환해주세요.
로마 숫자를 숫자로 표기하면 다음과 같습니다.
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
로마자를 숫자로 읽는 방법은 로마자를 왼쪽부터 차례대로 더하면 됩니다. III = 3 XII = 12 XXVII = 27입니다.
그런데 4를 표현할 때는 IIII가 아니라 IV 입니다. 뒤의 숫자에서 앞의 숫자를 빼주면 됩니다. 9는 IX입니다.
I는 V와 X앞에 와서 4, 9 X는 L, C앞에 와서 40, 90 C는 D, M앞에 와서 400, 900
def roman_to_num(s):
total = 0
si = { 'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
for i in range(len(s)-1):
if si[s[i]] < si[s[i+1]]:
total -= si[s[i]]
else:
total += si[s[i]]
return total + si[s[i+1]]
roman_to_num('XXVII')
codekata week1 day4
숫자인 num을 인자로 넘겨주면, 뒤집은 모양이 num과 똑같은지 여부를 반환해주세요.
num : 숫자
return : true or false (뒤집은 모양이 num와 똑같은지 여부)
예를 들어,
-
num = 123
return false
-> 뒤집은 모양이 321 이기 때문 -
num = 1221
return true
-> 뒤집은 모양이 1221 이기 때문 -
num = -121
return false
-> 뒤집은 모양이 121- 이기 때문 -
num = 10
return false
-> 뒤집은 모양이 01 이기 때문
def same_reverse(num):
reversed_str = str(num)[::-1]
if reversed_str == str(num):
return True
else:
return False
codekata week1 day3
String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str : 텍스트
return : 중복되지 않은 알파벳 길이 (숫자 반환)
예를 들어,
-
str = "abcabcabc"
return 은 3
-> 'abc' 가 제일 길기 때문 -
str = "aaaaa"
return 은 1
-> 'a' 가 제일 길기 때문 -
str = "sttrg"
return 은 3
-> 'trg' 가 제일 길기 때문
def get_len_of_str(s):
str_list = []
count_list = []
for i in range(len(s)):
if s[i] not in str_list:
str_list.append(s[i])
count_list.append(len(str_list))
else:
str_list = []
str_list.append(s[i])
count_list.append(1)
if len(count_list) > 1:
return max(count_list)
return len(str_list)
codekata week1 day1
two_sum함수에 숫자 리스트와 '특정 수'를 인자로 넘기면, 더해서 '특정 수'가 나오는 index를 배열에 담아 return 해주세요.
nums : 숫자 배열
target : 두 수를 더해서 나올 수 있는 합계
return : 두 수의 index를 가진 숫자 배열
예를 들어,
-
nums은 [4, 9, 11, 14]
target은 13 -
nums[0] + nums[1] = 4 + 9 = 13 이죠?
그러면 [0, 1]이 return 되어야 합니다.
def two_sum(nums, target):
for i in range(len(nums)):
s = nums[i]
result = []
for j in range(i+1, len(nums)):
total = s + nums[j]
if total == target:
result.append(i)
result.append(j)
return result
Author And Source
이 문제에 관하여([codekata]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimlilo/codekata저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)