Coding Test/JavaScript
-
[프로그래머스 / JS] 귤 고르기Coding Test/JavaScript 2023. 7. 18. 21:59
값들이 특정 분류로 나뉘면 해시 맵을 생각해 봐야 한다. 1. 2차원 배열로 만들어 주고 2. 원하는대로 정렬해 주자 function solution(k, tangerine) { // [1, 3, 2, 5, 4, 5, 2, 3] let hashMap = new Map(); for(let i = 0; i 1, 3 => 2, 2 => 2, 5 => 2, 4 => 1 } const sortedMap = [...hashMap].sort((a, b) => b[1] - a[1]); let tempSum = 0, i = 0; while(tempSum = k) { return i+1 } else { tempSum+=sortedMap[i][1]; i++ } } return..
-
[프로그래머스 / JS] 연속부분수열 합의 갯수Coding Test/JavaScript 2023. 7. 16. 23:54
으 어렵다.. 연속적인 원소를 원하는 만큼 뽑으려면 어떻게 짜야 할까. 뽑아서 더하고 배열에 넣고 new Set() 해서 중복된거 제거하면 될 거 같은데. 다중 for문은 시간복잡도가 너무 커질거 같고.. 아! 슬라이딩 윈도우 방법 써보자! function solution(elements) { const set = new Set(); const L = elements.length for(let size = 1; size
-
[프로그래머스 / JS] 구명 보트Coding Test/JavaScript 2023. 7. 15. 23:13
탐욕법(그리디) 알고리즘이란 현재 상황에서 가장 좋은(최선의) 것을 고르는 알고리즘을 말합니다. 하지만 현재 상황에서 가장 좋은 선택이 최종적으로 가장 좋은 결과를 도출해 낸다고 보장을 해줄 수 없기 때문에 주의 해야해요. 그러니 그리디 알고리즘을 선택할 때에서 탐욕적인 선택은 항상 안전하다는 것이 보장되야합니다. function solution(people, limit) { people = people.sort((a, b) => b - a); let answer = 0; for(let i = 0, j = people.length - 1; i limit){ answer++; } else { answer++; j--; } } return answer; } 쓰읍 다른 방법 없나 ...?
-
[JS/프로그래머스] 카펫Coding Test/JavaScript 2023. 7. 14. 22:41
완전탐색 문제에 속하는 카펫 문제를 풀어봤다. 완전탐색은 간단히 가능한 모든 경우의 수를 다 체크해서 정답을 찾는 방법이다. 즉, 무식하게 가능한 거 다 해보겠다는 방법을 의미한다. function solution(brown, yellow) { let answer; for(y=1; y= y) { const tmpTotalBrown = x*2 + y*2 + 4; if (brown === tmpTotalBrown) { answer = [x+2, y+2]; return answer; } } } } 시간 복잡도 O(n) 걸립니다.
-
[프로그래머스/JS] 피보나치 수Coding Test/JavaScript 2023. 7. 12. 23:34
이 문제는 문제를 이해하는데 시간이 걸렸다. 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수를 말하는데 0번째 피보나치 수가 0, 첫번째 피보나치 수가 1인건 정해져 있고 두번째 피보나치 수는 앞에 두개를 더한 1이 된다는 말이다. 예를 들어보면 0 1 1 2 3 5 8 13 과 같이 n-1 번째 수와 n-2번째 수가 더해져 n번째 수가 되는 법칙이 성립된다고 생각하면 된다. 그런데 문제에서 생뚱맞게 1234567 로 나누라고 해서 이게 뭐지 했는데 피보나치 수 44만 해도 2,971,215,073로 int의 값을 훨씬 넘은 수라 int 내에서 해결하기 위한 문제 의도라고 한다. function getFibonacci..
-
[JS/프로그래머스] 영어 끝말잇기Coding Test/JavaScript 2023. 7. 11. 22:29
오늘은 한번에 통과했다! for문 한번만 돌면 되게 풀이했다. function solution(n, words) { let answer; for (let i = 1; i < words.length; i++) { answer = [i % n + 1, Math.floor(i / n) + 1]; const item = words[i]; if (words.indexOf(item) !== i) { return answer; } const lastWord = words[i - 1].slice(-1); const firstWord = item[0]; if (lastWord !== firstWord) { return answer; } } return [0, 0]; }
-
[JS/프로그래머스]짝지어 생각하기Coding Test/JavaScript 2023. 7. 10. 21:36
function solution(s) { let arr = s.split(''); for(let i = 0; i < arr.length; i++) { if(arr[i] === arr[i+1]) { arr.splice(i,2) i = -1 } } return arr.length === 0 ? 1 : 0 } 오늘도 효율성 검사에서 막혔다... 흠.. 문자열이 길고 복잡해지면 for문을 너무 많이 돌게 되는 문제가 있는거 같은데.. stack을 써보면 for문을 한번만 돌아도 될 것 같다. function solution(s) { let stack = []; for(let i = 0; i < s.length; i++) { if(!stack.length || s[i] !== stack[stack.length-1..
-
[JS/프로그래머스] 다음 큰 숫자Coding Test/JavaScript 2023. 7. 9. 20:41
10진법의 수를 2진법으로 바꾸는데는 다양한 방법이 있다. 그 중 n진수를 -> m진수로 바꾸는 방법인 parseInt(num,n).toString(m) 를 사용하여 구현하였다. function solution(n) { let answer = n + 1; function countOnes (n) { let answer = 0 parseInt(n, 10).toString(2).split('').forEach((x) => { if (x === '1') { answer++; } }); return answer; } while(countOnes(n) !== countOnes(answer)) { answer++; } return answer; } 하지만 효율성 테스트를 통과하지 못했다. countOnes() 함수..