문제
양수 N을 이진법으로 바꿨을 때, 연속으로 이어지는 0 중에서 가장 큰 값을 return해 주세요.
이어지는 0은 1과 1사이에 있는 것을 의미합니다.
1과 1사이에 있는 0을 binary gap 이라고 하겠습니다.
input: 9
output: 2
설명: 9의 이진수는 1001 입니다.
1과 1사이에 있는 0은 2 이므로, 2를 return
input: 529
output: 4
설명: 529의 이진수는 1000010001 입니다.
binary gap은 4와 3 두개가 있습니다.
이 중 큰 값은 4이므로 4를 return
input: 20
output: 1
설명: 20의 이진수는 10100 입니다.
1과 1사이에 있는 연속된 0의 수는 1 뿐입니다.
(뒤에 있는 0은 1사이에 있는 것이 아니므로)
input: 15
output: 0
설명: 15의 이진수는 1111 입니다.
binary gap이 없으므로 0을 return
input: 32
output: 0
설명: 32의 이진수는 100000 입니다.
binary gap이 없으므로 0을 return
My Solution
const solution = N => {
let results = '';
function recur(n){
if(n < 2){
results = n+results
return;
} else {
results = String(n%2) + results
return recur(Math.floor(n/2))
}
}
recur(N)
answer = results.split('1').map(val => val.length);
console.log(answer)
if(results[results.length-1] === '0'){
answer.pop();
}
return Math.max(...answer)
}
Model Solution
const solution = N => {
let binary = (N).toString(2);
const binaryArr = binary.split('1');
let binaryGap = 0;
for (let i = 0; i < binaryArr.length-1; i++) {
if (binaryArr[i].length === 0) {
continue;
} else {
binaryGap = Math.max(binaryGap, binaryArr[i].length);
}
}
return binaryGap;
}
문제
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
const maxProfit = prices => {
let answer = 0;
for (let i=0; i<prices.length-1 ;i++) {
for (let j= i+1; j<prices.length; j++ ){
answer> prices[i]-prices[j] ? answer = prices[i]-prices[j] : answer
}
}
return Math.abs(answer)
};
Model Solution
const maxProfit = prices => {
var min = Number.MAX_SAFE_INTEGER;
var max = 0;
for (var i = 0; i < prices.length; i++) {
min = Math.min(min, prices[i]);
max = Math.max(max, prices[i] - min);
}
return max;
};