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