[codekata]

LILO Ghim·2021년 11월 23일
0

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
profile
킴릴로

0개의 댓글