본문 바로가기

알고리즘119

[프로그래머스] 기사단원의 무기 https://school.programmers.co.kr/learn/courses/30/lessons/136798 첫번째 => 시간초과 function getDivisionsLength(n) { return new Array(n).fill(0).map((e, index) => index+1).filter(e => n%e === 0).length; } function solution(number, limit, power) { var answer = 0; const divisions = []; // 약수들 구하기 for (let i = 1; i { return acc + ((curr > limit) ? power : curr); }, 0); return answer; } 약수 구할때 n/2초과는 확인할 필.. 2023. 6. 7.
[프로그래머스/카블] 1차 다트게임 *가 첫번째인지, 옵션의 중첩을 고려해야함 => 따로 옵션 배열을 만들자 dartResult를 loop돌면서 각각 num, bonus, option 배열에 분리하여 넣어준다 이때 숫자10 고려: 앞의 수가 1이고 현재가 0이면 1,0을 10으로 간주 옵션이 없는경우 다른 배열과 index를 맞추기위해: bonus를 넣고난뒤 다음char이 숫자이거나 배열을 넘어가서 undefined이면 null을 넣어준다 이제 num[i], bonus[i], option[i] 인덱스별로 계산을 해준다. Math.pow(숫자, 보너스) * 옵션 옵션이 #이면 -1을 곱해준다 옵션이 *이면 현재 값을 *2 해주고, 전의 값이 존재하면 *2 해준다. 마지막에 [단위 결과, 단위 결과, ....].reduce로 합해준다 첫번째 .. 2023. 6. 6.
[프로그래머스/카카오 블라인드] 실패율 https://school.programmers.co.kr/learn/courses/30/lessons/42889 실패율 계산 = 현재 스테이지에 남은 사람 수 / 현재 스테이지까지 올라온 전체사람수 array를 이용한 내림차순 정렬 function solution(N, stages) { var answer = []; let fails = []; // 실패율 계산 for (let stage = 1; stage s === stage).length; // 현재 stage에 남아 있는 사람의 수 const all = stages.filter(s => s >= stage).length; // fails.push([stage, curr/all]); } // 내림차순 정렬 fails.sort((a, b) => b[.. 2023. 6. 6.
[프로그래머스/카카오 블라인드] 비밀지도 https://school.programmers.co.kr/learn/courses/30/lessons/17681 0,0 일때 빼고 다 1이다 => OR | 를 이용해서 두 십진법의 OR bit연산을 구한다 이진법으로 변환 toString(2) regex /0|1/g 0|1: 0 or 1 g 전체를 찾음 replace(변경할 문자 찾는 규칙, 찾은 문자를 변경하는 규칙) +string : number 타입으로 변환 function solution(n, arr1, arr2) { return arr1.map((v, i) => addZero(n, (v | arr2[i]).toString(2)).replace(/1|0/g, a => +a ? '#' : ' ')); } const addZero = (n, s) =.. 2023. 6. 6.
[프로그래머스] 진수 변환하기 - toString(n), parseInt(n진수, n) https://school.programmers.co.kr/learn/courses/30/lessons/68935 첫번쨰 방법 전통적 수학 진법 구하는 방식으로 3씩 나눠서 나머지를 remains에다 넣어주고, 마지막 남은 몫까지 넣어준 뒤, 각 자리수 * 3의 n제곱의 합을 리턴했다. 3**i = Math.pow(3, i) function solution(n) { let remains = []; while(n >= 3) { remains.unshift(n % 3); n = Math.floor(n / 3); } remains.unshift(n); return remains.reduce((acc, curr, i) => { acc += curr * 3**i; // Math.pow(3, i) = 3**i re.. 2023. 6. 6.
[프로그래머스] 소수찾기 - Math.sqrt(n), Set.size() https://school.programmers.co.kr/learn/courses/30/lessons/12921 n까지의 숫자들 중 소수갯수 찾기 첫번째 방법 나름 머리 쓴다고 소수를 찾으면 그 수의 배수를 제거해줬다. function solution(n) { var answer = 0; const isPrime = new Array(n).fill(true); for(let i = 2; i 2023. 6. 6.