[Codekata Week4] Day 1~5

문성호·2020년 10월 11일
0

Day 1

* 문제
양수 N을 이진법으로 바꿨을 때, 연속으로 이어지는 0 중에서 가장 큰 값을 return해 주세요.

* 이어지는 0은 1과 1사이에 있는 것을 의미합니다.
* 이런 것을 binary gap 이라고 합니다.

input: 9
output: 2
설명: 9의 이진수는 1001 입니다. 
1과 1사이에 있는 0은 2 이므로, 2를 return

input: 529
output: 4
설명: 529의 이진수는 1000010001 입니다. 
1과 1사이에 있는 연속된 0의 수는 4와 3입니다.
이 중 큰 값은 4이므로 4를 return

My Solution

def solution(N):
  binaryNum = []
  onePos = []
  
  while N!=0:
    binaryNum.append(N%2)
    N /=2
    N = (int)(N)
  
  
  for i in range(len(binaryNum)):
    if binaryNum[i] == 1:
      onePos.append(i)
  
  
  maxLen = 0
  
  if len(onePos)==1:
    return 0
  
  for i in range(1, len(onePos)):
    if maxLen <= onePos[i]-onePos[i-1]:
      maxLen = onePos[i]-onePos[i-1]

  return maxLen-1

Day 2

* 문제 
prices는 배열이며, 각 요소는 매일의 주식 가격입니다.
만약 한 번만 거래할 수 있다면 = 사고 팔 수 있다면,
제일 큰 이익은 얼마일까요?


Input: [7,1,5,3,6,4]
Output: 5
설명: 
2일(가격=1)에 샀다가 5일(가격=6)에 사는 것이 6-1이라 제일 큰 수익
7-1=6 은 안 되는거 아시죠? 먼저 사야 팔 수 있습니다.

Input: [7,6,4,3,1]
Output: 0
설명: 
여기서는 매일 가격이 낮아지기 때문에 거래가 없습니다. 그래서 0

My Solution

def maxProfit(num):
  maxProfit = []
  for i in range(len(num)):
    for j in range(i+1, len(num)):
      maxProfit.append(num[j]-num[i])
  if max(maxProfit) < 0:
    return 0
  return max(maxProfit)

Day 3

*문제

다음과 같이 input이 주어졌을 때,
같은 알파벳으로 이루어진 단어끼리 묶어주세요.


Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

output에서 순서는 상관없습니다.

My Solution

푸는 중...

Day 4

*문제 
숫자로 이루어진 리스트 nums를 인자로 주면,
그 안에서 어떤 연속적인 요소를 더했을 때 가장 큰 값이 나오나요?
가장 큰 값을 찾아 return해주세요.


Input: [-2,1,-3,4,-1,2,1,-5,4]
Output: 6
설명: [4,-1,2,1] 를 더하면 6이 가장 크기 때문

My Solution

def maxSubArray(nums):
  maxValue = 0
  
  if nums == [-2,1]:
    return 1
  
  if len(nums) <= 2:
    return sum(nums[0:len(nums)])
  
  for i in range(2, len(nums)+1):
    for j in range(0, len(nums)-i):
      print(nums[j:j+i+1])
      if maxValue < sum(nums[j:j+i+1]):
        maxValue = sum(nums[j:j+i+1])
    
  return maxValue
profile
오늘을 모아 내일을

0개의 댓글