FrontEnd/프로그래머스
[JS] 신고 결과 받기
본인이 신고한 사람들을 저장할 객체와, 본인이 신고받은 수를 저장하는 객체를 만들어서 문제를 해결하였다. function solution(id_list, report, k) { const reportObj = {} const reportCnt = {} id_list.forEach(el => { reportObj[el] = [] reportCnt[el] = 0 }) report.forEach(el => { [a,b] = el.split(' ') if(!reportObj[a].includes(b)) { reportObj[a].push(b) reportCnt[b]+=1 } }) return id_list.map(el => reportObj[el].reduce((a,c) => reportCnt[c]>=k ? a..
[JS] 성격 유형 검사하기
mbti 점수를 저장해둘 객체를 하나 만든 후에, 질문지에 대한 점수를 카운팅 해서 높여준다. 이후 reduce함수를 통해서 더 큰 점수를 받은 것을 mbti 로 정한다. function solution(survey, choices) { const mbti = {'R' : 0 , 'T' : 0 , 'C' : 0 , 'F' : 0 , 'J' : 0, 'M' : 0 ,'A' : 0 , 'N' : 0} const category = ['RT','CF','JM','AN'] for (let i=0 ; i a+(mbti[c[0]]>=mbti[c[1]]?c[0]:c[1]),""); }
[JS] 숫자 짝꿍 (쉬운풀이 ?)
우리가 필요한 작업은 아래와 같다. 1. X,Y가 공통되는 숫자들 구하기 2. 숫자들을 역순으로 정렬하기 3. 결과가 문자열로 나와야하며, 0000 처럼 나온 값들은 0으로 바꿔줘야함. 해당 값들을 숫자로 생각하면 시간초과에 걸리게 된다. 따라서 숫자를 숫자가 아닌 단순한 문자라고 생각을 하고 문제를 풀어보았다. 0~9까지의 숫자가 오게되니 해당 값을 idx로 둔 10개짜리 배열을 넣은다음 X,Y를 순회하면서 0~9 까지의 숫자들을 카운트 해주면된다. 이후, 두 배열들의 idx가 같은 값들을 비교하면서 최솟값만 넣어주면 된다. 이러면 1,2 번 과정을 includes나 indexOf등의 시간을 많이 잡아먹는 함수를 안 쓰고 해결할 수 있다. 3번도 굳이 문자를 쓰지 않고, 리스트에 0만 있는 경우나, 아..
[JS] 삼총사
배열의 순열을 구해서, 각 순열마다 합을 계산해본 후, 0올때마다 reduce를 활용해서 개수를 세 주었다. const getCombination = (arr,num) => { const ret = [] if (num === 1) return arr.map(el => [el]) arr.forEach((fixed,idx,origin)=> { const rest = origin.slice(idx+1); const combinations = getCombination(rest,num-1) const attached = combinations.map(el => [fixed, ...el]); ret.push(...attached) }) return ret } function solution(number) { re..
[JS] 콜라 문제
문제에 나온대로 수식을 정해주면 된다. ~~(n/a)*a로 바꿀수 있는 최대의 콜라 병수를 구해주고, ~~(n/a)*b로 새로 얻은 콜라병의 수를 구할 수 있다. function solution(a, b, n) { var answer = 0; while (n>=a) { answer +=~~(n/a)*b n = n - ~~(n/a)*a + ~~(n/a)*b } return answer; }
[JS] 옹알이 (2)
aya , ye , woo , ma가 모두 들어있는지 확인하면 되지만, 문제 조건에 연속으로 같은 옹알이를 한다면 발음할 수 없다는 조건사항이 붙어있어서. some을 활용해서 이를 해결해주었다. function solution(babbling) { const li = ['aya','ye','woo','ma'] const ret = babbling.reduce((a,c,i,arr) => { if (li.some(el => c.includes(el.repeat(2)))) return a for (const el of li) c = c.replaceAll(el,' ') return c.replaceAll(' ','').length ? a : a+1 },0) return ret; }