[연습문제] 지난 시험 복습 문제 1




지난 시험 복습 문제 1 (211007)

네카라쿠배 온라인 1기를 수강하며 코딩테스트 시험 봤던 문제들을 다시 풀어보자.

가장 많이 등장하는 수

function solution(str) {
  const strObj = [...str].reduce((acc, cur) => {
    acc[cur] = (acc[cur] || 0) + 1;
    return acc;
  }, {});

  return Object.keys(strObj).reduce((acc, cur) => (strObj[cur] > strObj[acc] ? cur : acc)) / 1;
}

console.log(solution('17477117788888'));



구슬 맞추기

function solution(marbles) {
  const marbleObj = marbles.reduce((acc, cur) => {
    acc[cur] = (acc[cur] || 0) + 1;
    return acc;
  }, {});

  const oddMarble = Object.keys(marbleObj).filter(num => marbleObj[num] === 1);
  return oddMarble.length ? +oddMarble[0] : 0;
}

console.log(solution([1, 1, 2, 2, 3, 3]));



문자열 계산기

function solution(str){
    let i = 1
    let start = 0
    let nums = []
    while(i<=str.length){
        if (str[i] === "+" || str[i] === "-") {
            nums.push(str.substring(start, i))
            start = i
        }
        i++
    }
    nums.push(str.substring(start))
    return nums.reduce((acc, num) => acc + num/1, 0)

}

console.log(solution('-3+26-7-3+3'))



사과 나무

function solution(fruits){
    let score = []
    for (let i = 0; i<fruits.length; i++){
        acc = fruits[i]
        score.push(acc)
        for (let j = i+1; j<fruits.length; j++){
            acc += fruits[j]
            score.push(acc)
        }
    }
    return Math.max(...score)

}

console.log(solution([-2,5,-3,6,8,-1,-5,3]))



연속된 자연수의 합이 N

function solution(n) {
  let acc;
  let cnt = 1;
  for (let i = 1; i < n; i++) {
    acc = i;
    for (let j = i + 1; j <= n; j++) {
      acc += j;
      if (acc > n) break;
      else if (acc == n) {
        cnt++;
        break;
      }
    }
  }
  return cnt;
}

console.log(solution(15));



나의 회고🤔

약 5주전에 시험봤던 문제들을 다시 풀어보았다.
그때는 자료구조, 알고리즘을 제대로 공부한 게 처음이어서 모든게 어렵게 느껴졌었는데,
지금 다시 풀어보니 너무 간단하다…ㅋㅋㅋㅋ
프로그래머스 1단계정도? 수준같다.
스터디에서 알고리즘 실력이 중간 아니면 중간 이하라서 항상 조급하기만 한데,
느리더라도 분명 꾸준히 실력이 늘고 있는 것은 사실이니 조급해하지말고 꾸준히 해나가자!