부스트캠프 웹·모바일 6기 자가진단 마지막 문제

부트캠프 교육을 마무리 짓고 이력서를 몇군데 넣어서 지원해 보았지만 서류통과 조차 쉽지 않다는걸 느꼈다.... 그렇게 개인적으로 코테 및 여러 강의로 공부하다가 부스트캠프 6기 모집을 보고 도전을 해보기로 했다.

자가진단 문제 중에 마지막 문제를 보고 가장 먼저 떠오른 것은 배열의 reduce메서드가 생각나서 reduce를 활용해서 문제를 풀어보았다.

function solution(arr) {
   let answer = arr.reduce((acc, cur) => {
     // console.log(arr[cur])
    // if (acc[cur]) {
     //   acc[cur] = acc[cur] + 1;
     // } else {
     //   acc[cur] = 0 + 1;
     // }
     acc[cur] = (acc[cur] || 0) + 1;
     return acc
   }, {});
   let result = Object.values(answer);
   let temp = [];
   for (let i = 0; i < result.length; i++) {
     if (result[i] > 1) temp.push(result[i]);
   }
   // console.log(!temp.length)
   if (!temp.length) temp.push(-1)
   return temp;
 }

// // let arr = [1, 2, 3, 3, 3, 3, 4, 4];
// // let arr = [3, 2, 4, 4, 2, 5, 2, 5, 5];
let arr = [3, 5, 7, 9, 1];
console.log(solution(arr));

처음에는 reduece로 중복값을 객체로 만들어서 result에 객체의 value값으로 된 배열을 이용해 중복값을 배열을 return 하는 형식으로 답을 작성하였는데 생각해보니 저렇게 하는게 value의 값 배열을 만드는 단계가 늘어나서 다시 고민들 해서 아래 문장을 조금 변경하였다.

function solution(arr) {
  let answer = arr.reduce((acc, cur) => {
    // console.log(arr[cur])
    // if (acc[cur]) {
    //   acc[cur] = acc[cur] + 1;
    // } else {
    //   acc[cur] = 0 + 1;
    // }
    acc[cur] = (acc[cur] || 0) + 1;
    return acc
  }, {});
  let temp = [];
  // console.log(typeof answer)
  for (let key in answer) {
    // console.log(key, answer[key])
    if (answer[key] > 1) temp.push(answer[key]);
  }
  // console.log(!temp.length)
  if (!temp.length) temp.push(-1)
  return temp;
}

// let arr = [1, 2, 3, 3, 3, 3, 4, 4];
// let arr = [3, 2, 4, 4, 2, 5, 2, 5, 5];
let arr = [3, 5, 7, 9, 1];
console.log(solution(arr));

이번에는 객체를 직접 for.. in으로 접근해서 배열을 리턴하는 형식으로 변경을 해보았다.

자가 진단 풀이에서는 Set, Map을 이용해서 문제풀이가 되었는데 자바스크립트를 공부하면서 자주 접해보지 않아서 개인적으로 위와 같은 풀이는 생각나지 않았지만 Set, Map을 이용해서 푸는 문제들을 풀어보면서 사용법을 더 익혀야 할 것 같다.

좋은 웹페이지 즐겨찾기