[Level1] 11. 51 ~ 54




드디어 1단계 마지막..!! 카카오 인턴쉽 문제들만 남았다…ㅋㅋ


51. 내적

프로그래머스

function solution(a, b) {
  return a.reduce((acc, value, index) => {
    return acc + value * b[index];
  }, 0);
}

제목이 내적이고 카카오여서 어려울줄 알고 그동안 미뤄왔는데 엄청 간단한 아이였다…
한줄로 가볍게 성공!



52. 키패드 누르기🤔

programmers

function solution(numbers, hand) {
    
    function dis(num, lH, rH, pos, hand){
    const lD = Math.abs(pos[lH][0] - pos[num][0]) + 
        Math.abs(pos[lH][1] - pos[num][1])
    const rD = Math.abs(pos[rH][0] - pos[num][0]) + 
        Math.abs(pos[rH][1] - pos[num][1])
    
    if (lD === rD) return hand === 'left' ?  'L' : 'R';
    return lD < rD ? 'L' : 'R'
}

    const pos = {
        1: [0, 0], 2: [0, 1], 3: [0, 2],
        4: [1, 0], 5: [1, 1], 6: [1, 2],
        7: [2, 0], 8: [2, 1], 9: [2, 2],
        '*': [3, 0], 0: [3, 1], '#': [3, 2]
    };
    var lH = '*', rH = '#';
    var result = ''
    for (var num of numbers){
        if (num % 3 === 1){
            result += 'L';
            lH = num;
        }
        
        else if (num !==0 && num % 3 === 0){
            result += 'R';
            rH = num;
        }
        else{
            result += dis(num, lH, rH, pos, hand)
            result[result.length-1] === 'L'? lH = num : rH = num
        }
    }

    return result;
}

와.. 막상 다른 사람들 풀이를 보니 해결법이 간단한데 내가 구현하려고 하니 어려웠다..ㅠㅠ
2차원 배열로 접근하는게 막연한 두려움이 있는데 많이 연습해서 두려움 극복하자!



53. 크레인 인형뽑기 게임

programmers

function solution(board, moves) {
  let answer = 0;
  let len = board.length;
  let stack = [];
  moves = moves.map((v) => v - 1);
  console.log(moves);

  moves.forEach((item) => {
    for (let i = 0; i < len; i++) {
      if (board[i][item] === 0) continue;
      stack.push(board[i][item]);
      board[i][item] = 0;
      break;
    }
    if (
      stack.length !== 0 &&
      stack[stack.length - 2] === stack[stack.length - 1]
    ) {
      stack.pop();
      stack.pop();
      answer += 2;
    }
  });

  return answer;
}

이주전에 한번 도전했다가 포기했던 문제인데 이제는 풀린다!!
점점 실력이 쌓이는게 느껴진다. 더더 열심히하자 🤩👊




54. 실패율 🤔

programmers

function solution(N, stages) {
  let total = stages.length;
  let arr = [];
  for (let i = 1; i <= N; i++) {
    let stageNum = stages.filter((item) => item === i).length;
    let failRatio = 0;
    if (stageNum === 0) failRatio = 0;
    else {
      failRatio = stageNum / total;
    }
    total -= stageNum;
    arr.push({ id: i, ratio: failRatio });
  }

  arr.sort((a, b) => {
    if (a.ratio > b.ratio) return -1;
    else if (a.ratio < b.ratio) return 1;
    else {
      if (a.id > b.id) return 1;
      else return -1;
    }
  });

  return arr.map((item) => item.id);
}

다른 분의 코드를 참고해서 풀었다 ㅠ
이 문제를 그동안 여러번 시도했는데 그동안 문제 자체가 이해가 안갔었다.
독해력 부족인가..? 문제 이해가 너무 어렵다😭
sort 함수를 객체에 적용하는 방법 이 참에 알아두면 좋을 것 같다!



1단계 완료 회고 🤔

드디어 길고 길었던 1단계 문제들 모두 완료!
3주전과 비교하면 js 내장 함수를 어느정도 자유자제로 쓸 수 있고, 문제를 만나도 무섭지 않다는 점이 달라졌다.
그동안 코테 라는 단어만 나오면 위축되고 “나는 코테는 전혀 못해…“라는 생각이 있었는데 이제는 그런 생각은 끝!
스스로 내장함수를 통한 숏코딩을 하면서 best 풀이와 비교하는 즐거움을 알게 되었다. 👍
이제 2단계 문제 풀면서 코테 문제에 자료구조를 적용하며 자료구조에 대한 두려움도 떨쳐내자!!
화이팅!!👊👊

프로그래머스순위
프로그래머스 순위가 드디어 천단위대로 왔다!! 백단위가 되는 그날까지!!! 🏃‍♂️🏃‍♂️🏃‍♂️🏃‍♂️