본문 바로가기

leetcode15

[LeetCode] 2. Add Two Numbers (javascript) 두 Linked List를 더해주는 문제다. 리스트가 integer 크기 제한보다 길 때도 있으므로 BigInt를 사용했다. /** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } */ /** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */ var addTwoNumbers = function (l1, l2) { let l = ''; let ll = ''; while (l1) { l = l1... 2021. 5. 31.
[LeetCode] 12. Integer to Roman (javascript) 주어진 숫자를 로마자로 변환하는 문제다. 1~3999의 숫자만 변환할 수 있으면 된다. 1의 자리, 10의 자리, 100의 자리, 1000의 자리에서 사용되는 문자열의 종류를 정의해주고, 0~9의 숫자 표현법을 패턴화하여 더해주도록 했다. /** * @param {number} num * @return {string} */ var intToRoman = function(num) { // num은 1~3999이다. const arr = num.toString().split('').reverse(); let result = ''; for (let i = 0; i < arr.length; i++){ result = makeRoman(parseInt(arr[i]), i) + result; } return res.. 2021. 5. 31.
[LeetCode] 17. Letter Combinations of a Phone Number (javascript) 전화기의 숫자 버튼 2~9에는 영문자가 적혀 있다. 주어진 숫자로 조합 가능한 영문자 배열을 리턴하는 문제이다. 2번 버튼은 abc, 3번 버튼엔 def라고 적혀있다면 ['a', 'b', 'c'] 를 만들고 배열을 반복을 돌면서 각 요소마다 다음 버튼의 문자열을 붙여주는 방식으로 해결했다. [['ad', 'ae', 'af'], 'b', 'c'] [['ad', 'ae', 'af'], ['bd', 'be', 'bf'], 'c'] [['ad', 'ae', 'af'], ['bd', 'be', 'bf'], ['cd', 'ce', 'cf']] 그리고 배열을 평탄화해준다. 또 다음 버튼이 있다면 평탄화된 배열에 대하여 똑같이 반복한다. 구상은 쉽게 했는데, 중간에 전화기 버튼 객체가 오염되는 문제가 있어 시간을 허비.. 2021. 5. 31.
[LeetCode] 11. Container With Most Water (Javascript) https://leetcode.com/problems/container-with-most-water/submissions/ 막대들이 주어지고, 가장 넓은 면적을 찾는 문제다. 이중포문과 완전탐색으로 풀었는데, 문제를 딱 봤을때 직관적으로 떠오르는 풀이방법이긴 하지만... 더 좋은 방법이 있지 않을까? var maxArea = function(height) { // 위치 index, 높이 h인 object 배열을 만든다. const map = height.map((h, index)=> ({index, h})); let answer = 0; // 이중 포문...으로 모든 조합을 찾는다. for (let i = 0 ; i < map.length; i++) { for (let j = i + 1; j < map... 2020. 7. 21.
[LeetCode] 349, 350. Intersection of Two Arrays I, II (Javascript) 배열의 겹치는 부분을 찾는 문제다. 1은 여러번 겹쳐도 하나만 리턴하면 되고, 2는 여러번 겹치면 여러개를 리턴해야 한다. Intersection of Two Arrays I var intersection = function(nums1, nums2) { const answer = [] for (n1 of nums1) { if(nums2.includes(n1)){ answer.push(n1) } } return Array.from(new Set(answer)); }; nums1 배열을 반복을 돌면서 nums2에도 있다면 삭제하고 answer 배열에 담는 방식으로 풀었다. var intersection = function(nums1, nums2) { const answer = nums1.filter((n1).. 2020. 7. 20.
[LeetCode] 189. Rotate Array (Javascript) k번만큼 배열 앞에서 뒤로 아이템을 옮기는 문제다. var rotate = function(nums, k) { for(let i = 0; i < k; i++) { const pop = nums.pop(); nums.unshift(pop); } return nums; }; 문제 흐름대로 k번 반복을 돌며 pop과 unshift를 해도 되지만 var rotate = function(nums, k) { const spliced = nums.splice(nums.length - k, nums.length); nums.unshift(...spliced); return nums; }; k개만큼 떼서 한번에 unshift하는게 훨씬 낫다. 2020. 7. 20.