FrontEnd/프로그래머스

    [JS] 완주하지 못한 선수

    map 자료형을 활용해서 완주한 선수들을 map에 저장하고, 동명이인이 있을 수 있으니 수를 카운트해주었다. 이후, participant에서 완주한 사람들의 카운팅 수를 줄여나가면서 없는 한사람을 찾았다. function solution(participant, completion) { const map = new Map(); completion.forEach(el => { if(map.has(el)) map.set(el,map.get(el)+1) else map.set(el,1) }) return participant.filter(el => { if ( map.has(el) && map.get(el) ) { map.set(el,map.get(el)-1) return false } else return t..

    [JS] K번째 수

    문제의 순서대로 자르고 -> 정렬하고 -> k번째 값을 가져오면 된다. map,slice,sort함수를 체이닝 해서 해결하였다. const solution = (array, commands) => commands.map(el => array.slice(el[0]-1,el[1]).sort((a,b) => a-b)[el[2]-1]); 사실 가독성이 좋은 코드는 아니라 생각한데 가끔씩은 이런 스타일로 하는것도 재밌는 것 같다.

    [JS] 모의고사

    수포자 3명이 답을 적는 방식을 배열에 미리 저장해두었다. 이후, reduce로 맞았는지 틀렸는지를 계산해 가며 총 몇개 맞췄는지에 대한 저보를 저장해두었다. 마지막으로, 최대값들의 idx값들을 저장한 배열을 return해주었다. function solution(answers) { const ary = [[1,2,3,4,5],[2,1,2,3,2,4,2,5],[3,3,1,1,2,2,4,4,5,5]] const cntLst = answers.reduce((a,c,idx) => [ ...new Array(3) ].map((_,i) => c === ary[i][idx%ary[i].length] ? a[i]+1 : a[i]) ,[0,0,0]); const ret = [] for (let i = 0 ; i< 3 ;..

    [JS] 체육복

    왜인지 조금 까다로운 문제였다. 전체 학생의 수는 2명 이상 30명 이하입니다. 체육복을 도난당한 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다. 여벌의 체육복을 가져온 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다. 여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있습니다. 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다. 중요한건 체육복을 도난당한 학생이 다른사람에겐 빌려줄 수 없다는 것이다. 사실 위와같이 입력되면 내 생각에는 2,3번이 각각 오른쪽 사람인 3,4번에게 체육복을 빌려주면 바로옆사람한테 빌려주는거니까 성..

    [JS] 실패율

    우선 N개의 배열을 만들어서 배열의 첫번째부터 [ 해당 라운드에 도착한 사람 , 해당 라운드를 아직 못 깬 사람 , 스테이지 ] 를 저장해두었다. 이후, stage배열을 받아서 for문을 통해서 위 사람들을 채워주었다. 마지막으로 sort()를 활용해서 실패율을 구하면서 정렬을 해주고, map 함수를 통해서 스테이지만 남겨주는 방식으로 해결해보았다. function solution(N, stages) { var ary = [ ... Array(N) ].map((_,i) => [0,0,i+1]) for (const stage of stages) { for (let i=1 ; i a[0]/a[1] - b[0]/b[1]).map(el => el[2]) return ret; }

    [JS] 크레인 인형뽑기

    stack 구조로 인형을 넣을 배열은 하나 만들고, 판을 돌려서 인형을 뺄때 pop으로 뺴기 편한 구조로 만들었다. 1,2번 테케가 잘 통과가 안되었는데 stack이 비어있는 경우를 예외처리해줌으로 이를 해결했다. function solution(board, moves) { const stack = [] const newBoard = board.reduce( (result, row) => row.map((_, i) => row[i] ? [ row[i] , ...(result[i] || []) ] : []),[]) return moves.reduce((a,c) => { const doll = newBoard[c-1].pop() if (doll === stack[stack.length-1] && stack...