목록알고리즘 (13)
코딩쌀롱
문제 Leetcode Sort Colors 문제 - input: 숫자 0, 1, 2로 이뤄진 배열 - output: void, - 주의: 카피하지 않고 nums 배열을 in-place로 swap해서 sort 풀이 런타임: 71ms / 86.69% (주로 70ms대로 나옴) 메모리: 38MB / 98.00% var sortColors = function(nums) { let zeroP = 0; let twoP = nums.length - 1; for(let i = 0; i < nums.length; i++) { if(twoP < i) break; else if(nums[i] === 0) { nums[i] = nums[zeroP] nums[zeroP] = 0; zeroP++; if(zeroP-1 === i)..
문제 Leetcode Find Pivot Index 문제 - input: 정수 배열 nums - output: pivot index의 왼쪽의 모든 값의 합과 오른쪽의 모든 값의 합이 같을 때의 pivot index, 없으면 -1 풀이 80ms / 98.33% var pivotIndex = function(nums) { let total = nums.reduce((a,b) => a+b) let leftSum = 0; for(let i = 0; i < nums.length; i++) { const rightSum = total - leftSum - nums[i]; if(leftSum === rightSum) return i; leftSum += nums[i]; } return -1; }; pivot 인덱스 ..
알고리즘을 다시 처음부터 시작해보려고 한다. 코드스쿼드가 끝났으니 이제 모두 내가 알아서 해야한다! 처음부터 매일매일 쌓아가보자👊🏼 문제 Leetcode Move Zeroes 문제 - input: 정수 배열 nums - output: 0이 아닌 정수는 순서 그대로, 0만 오른쪽으로 이동한 배열 - 주의! 배열 복사하지 말고 in-place로 풀이 76ms / 93.54% var moveZeroes = function(nums) { let left = nums.indexOf(0); if(left === -1) return nums; let right = left; for(let i = left; i < nums.length; i++) { if(nums[right] === 0) right++; else { ..
정렬 알고리즘 중 quick sort를 공부했다. 코딩하는 거니 유튜브를 보고 자바스크립트 코드로 작성해봤다. function getSortedArr(arr) { quickSort(arr, 0, arr.length - 1); return arr; } function quickSort(arr, l, r) { if (l < r) { const p = partition(arr, l, r); quickSort(arr, l, p - 1); // * quickSort(arr, p + 1, r); // ** } } partition 함수의 반환값은 pivot의 인덱스. 피봇 이전 원소들로 quickSort 재귀, 피봇 이후 원소들로 quickSort 재귀를 돈다. 그러다가 원소가 하나만 남으면 l=r 조건으로 함수가..
문제 프로그래머스 소수 찾기 문제 input: 숫자로 이루어진 문자열 output: 숫자를 조합해서 만들 수 있는 소수 개수 네이스 풀이 분석 두 시간 안에 풀지 못해서 네이스 풀이를 분석했다. 코드 고마워요🙂 네이스 코드를 복사해서 vsc에서 디버깅하면서 공부했다. function solution(numbers) { const answer = new Set(); const visited = []; findPrime('', visited, answer, numbers); // N! * logN return answer.size; } function findPrime(prevSum, visited, answer, numbers) { if (visited.length === numbers.length) re..
문제 프로그래머스 모의고사 문제 input: 1번부터 마지막 문제까지 정답이 순서대로 들은 배열 answers output: 가장 많은 문제를 맞힌 사람이 누구인지 담음 배열 (여럿일 경우 오름차순) 나의 풀이 1, 2, 3번 학생들의 찍는 번호들을 담을 배열을 어떻게 저장할지 고민하다가 처음에는 2차원 배열로 저장했다. 코드를 모두 작성했을 때 지저분해보이고, forEach를 한 번 더 돌아야해서 각 학생들의 배열들을 따로 저장하는 것으로 수정했다. 그리고 메서드 체이닝을 많이 안 써봤는데 보기에 되게 좋은 것 같다! 자주 활용해봐야겠다.
문제 프로그래머스 크레인 인형뽑기 게임 문제 input: 1) 게임 화면의 격자 상태가 담긴 2차원 배열 board 2) 인형을 집기 위해 크레인을 작동시킬 위치가 담긴 배열 moves output: 크레인을 모두 작동시킨 후 터뜨려져 사라진 인형의 개수(number) 나의 풀이 한 달 전쯤 같은 문제를 풀었었는데 그 때는 이중 for문으로 풀었었다. 그래서 이번에는, 1. for문을 사용하지 않고 2. reduce를 사용해서 2차원 배열의 행, 열을 바꿔주는 함수도 직접 작성해보기로 했다. let board = [ [0, 0, 0, 0, 0] [0, 0, 1, 0, 3] [0, 2, 5, 0, 1] [4, 2, 4, 4, 2] [3, 5, 1, 3, 1] ]; 문제에서 input으로 주는 2차원 배열 ..
문제 LeetCode 83. Remove Duplicates from Sorted List 문제 input: 싱글 링크드 리스트의 head node output: 중복 val인 노드들을 제거한 링크드 리스트의 head node // Definition for singly-linked list. function ListNode(val, next) { this.val = (val===undefined ? 0 : val) this.next = (next===undefined ? null : next) } 노드들은 val, next 속성을 가지고 있다. 나의 풀이 while문 마지막에 현재 노드를 다음 노드로 바꿔주고, 현재 노드가 끝까지 가서 null일 때 while문을 더 이상 돌지 않게 했다. ✱바깥 wh..
문제 LeetCode 7. Reverse Integer 문제 input: 32비트 정수 output: 32비트의 범위 밖이면 0을 리턴, 범위 내면 각 숫자를 뒤집어서 리턴(양,음은 그대로) 나의 풀이 1. 수를 배열로 만들어 쪼갠다. (toString, split) 2. 순서를 반대로 뒤집는다. - 제일 앞 문자가 '-'가 아니면 : 뒤집어서 합치고 숫자로 (reverse, join, parseInt) - 제일 앞 문자가 '-'일 경우 : 제일 앞 문자를 제외하고 뒤집어서 합치고 숫자로 (splice, reverse, join, parseInt) 3. 32비트의 범위 밖이면 0을 반환 아니면 result 반환 입력값이 음수일 때 '-'를 체크하는 부분이 뭔가 찝찝했는데 json님의 풀이를 보고 답답했던..