Algorithm(Javascript) (14) 리스트형 53. Maximum Subarray var maxSubArray = function(nums) { let max = -100000000; let current = 0 for(let i = 0; i < nums.length; i++) { current = Math.max(current + nums[i], nums[i]) max = Math.max(max, current) } return max // 이전 누적값과 현재값 더한거랑 현재값이랑 비교해서 max에다가 비교한다 }; 배열내에서 부분집합 배열들중에서 요소들의 총합이 가장 큰값을 구하는 문제이다. 처음에는 이중 for문으로 모든 배열들의 요소들의 합을 비교하는 로직으로 했지만 O(n^2) 시간 복잡도로 인해서 시간초과됐다.. 저 로직으로는 한번의 for문으로 시간 복잡도가 O(n)으로 .. 35. Search Insert Position (leetCode) var searchInsert = function(nums, target) { if (target > nums[nums.length-1]) { return nums.length; } for(let i = 0; i < nums.length; i++){ if(nums[i] === target) { return i } else { if(target < nums[i]) { return i } } } }; target이 nums배열에서 가장 마지막 값보다 크면 배열 길이를 리턴해준다(문제에서 배열이 이미 정렬된 상태라고 나옴). for문을 돌면서 배열의 값과 같으면 해당 index를 리턴하고 아니면 target값이 현재값보다 작다면 현재 index를 리턴해준다. 알고리즘 문제 12 배열을 받아서 0숫자는 전부다 배열의 끝에 옮겨주는 문제이다. const moveZeroes = nums => { let j = 0 for(let i=0; i 알고리즘 문제 11 const minPathSum = grid => { for (let i = 1; i < grid.length; i++) { grid[i][0] += grid[i-1][0]; } for (let i = 1; i < grid[0].length; i++) { grid[0][i] += grid[0][i-1]; } for (let i = 1; i < grid.length; i++) { for (let j = 1; j < grid[0].length; j++) { grid[i][j] += Math.min(grid[i-1][j], grid[i][j-1]); } } return grid[grid.length-1][grid[0].length-1]; }; 일단 가로 세로 부분은 첫번째 반복문과 두번째 반복문으로 전 inde.. 알고리즘 문제 10 const complexNumberMultiply = (a, b) => { let realNum1 = Number(a.split('+')[0]) let fakeNum1 = Number(a.split('+')[1].split('i')[0]) let realNum2 = Number(b.split('+')[0]) let fakeNum2 = Number(b.split('+')[1].split('i')[0]) let answerRealNum = realNum1*realNum2 - fakeNum1*fakeNum2 let answerFakeNum = realNum1*fakeNum2 + realNum2*fakeNum1 return String(answerRealNum) + '+' + String(answerFakeNu.. 알고리즘 문제 9 1. 풀이1 function topK(nums, k) { const setArr = new Set(nums) let countObject = {} let answer = [] let valueBox = [] for(const value of setArr) { countObject[value] = 0 } for(const value of nums) { countObject[value] += 1 } for(const key in countObject) { valueBox.push(countObject[key]) } valueBox = valueBox.sort((a, b) => b - a); for(let i=0; iitem === setArr[i] )]; arrCollec.push(numArr); } arr.. 알고리즘 문제 8 function isValid(s) { // 여기에 코드를 입력해주세요. const splitStr = s.split(''); let box = [] for(const value of splitStr) { if(value === '[' || value ==='{' || value === '(') { box.push(value); } else { let popValue = box.pop() if(value ===']') { if(popValue !== '[') { return false } else if (value === ')') { if(popValue !== '(') { return false } else if (value === '}') { if(popValue !== '{') { return fa.. 알고리즘 문제 7 문제에 접근하는 방법은 다양하지만 Set자료형을 통해서 문제를 해결했다. Set자료형은 받은 값에서 중복된값들을 제거한 결과값을 반환해준다. function moreThanHalf(nums) { let answer; const setNums = new Set(nums) const numsObject = {} for(let value of setNums) { numsObject[value] = 0 } for(let i=0; i= nums.length/2) { answer = Number(key) } } return answer } s.. 이전 1 2 다음