CodeKata Week 4

Seob·2020년 8월 30일
0

Algorithms

목록 보기
7/8
post-thumbnail

Day 1

  • 문제
    양수 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;
}

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

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;
};
profile
Hello, world!

0개의 댓글