[Codekata Week3] Day 1~5

문성호·2020년 9월 30일
0

DAY 1

문제
두 개의 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.

My Solution

def complexNumberMultiply(a, b):
  num_A = tuple(map(int, (a.split('i')[0].split('+'))))
  num_B = tuple(map(int, (b.split('i')[0].split('+'))))
  
  resultReal = (num_A[0]*num_B[0] - num_A[1]*num_B[1])
  resultImage = (num_A[0]*num_B[1] + num_A[1]*num_B[0])
  
  result = str(resultReal)+"+"+str(resultImage)+"i"
  
  return result
  • 풀이에 유일한 걸림돌은 String을 split해서 숫자로 분리하는 과정.
  • i를 먼저 불리한 후 , +로 분리하면 숫자만 뽑을 수 있다.
  • 그 이후 복소수 연산공식을 이용해서 실수부 따로 허수부 따로 분리해준 후 result로 return.

DAY 2

문제
문자로 구성된 배열을 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"]

My Solution

def reverseString(s):
  s.reverse()
  return s
  
  • 프로젝트 기간이라 배려해주신 느낌?
  • Reverse함수를 쓰면 쉽게 풀렸다.

DAY 3

푸는 중...

Day 4

* 문제
주어진 숫자 배열에서, 0을 배열의 마지막쪽으로 이동시켜주세요.
원래 있던 숫자의 순서는 바꾸지 말아주세요.

* 새로운 배열을 생성해서는 안 됩니다.

Input: [0,1,0,3,12]
Output: [1,3,12,0,0]

My Solution

def moveZeroes(nums):
  for i in range(nums.count(0)):
    nums.pop(nums.index(0))
    nums.append(0)
    print(nums)
  
  return nums
  • 0인 숫자들을 전부 뒤로 이사시키는 코드.
  • count함수를 이용해서 값이 0인 요소들의 갯수를 구하고, pop으로 앞에서부터 지우고, 뒤에서 추가하는 방식으로 짤 수 있다.

Day 5

* 문제
재귀를 사용하여 팩토리얼(factorial)을 구하는 함수를 구현해주세요.
팩토리얼이란 1에서부터 n까지의 정수를 모두 곱한것을 말합니다.

1! = 1
2! = 1 * 2
5! = 1 * 2 * 3 * 4 * 5

My Solution

def factorial(n):
  if n == 0:
    return 1
    
  return n*factorial(n-1)
  • 재귀함수는 자신을 호출하는 함수.
  • 재귀함수는 next state와 end state가 중요한데, 팩토리얼을 풀 때에서 next state는 n-1이고 end state는 n==0일때다.
  • 재귀함수는 시간이 좀 더 나면 더 확실하게 공부할 예정..
profile
오늘을 모아 내일을

0개의 댓글