Problem Solved
[LeetCode] 1번 문제 - Two Sum
문제 1. Two Sum 문제 설명 배열의 두 수를 더해 타겟의 수가 나오도록 하는 위치를 배열로 반환하는 문제 처음에는 이중 반복문을 사용해 두 수를 더한 값이 타겟 값이 나오면 해당 값의 인덱스를 배열로 묶어 반환하도록 풀었다. 더 간단한 풀이가 있을 것 같아서 솔루션을 참고해 Map을 사용했다. 먼저 빈 Map을 만든다. 반복문을 돌면서 현재 배열의 값을 타겟 값에 뺀 값이 Map에 있는지 확인한다. 값이 Map에 있으면 해당 수의 index 값(value)과 현재 index를 배열로 반환한다. 값이 Map에 없으면 현재 값과 인덱스를 Map에 추가한다. 성공 코드 const twoSum = (nums, target) => { let map = new Map(); for (let i = 0; i <..
[LeetCode] 283번 문제 - Move Zeroes
문제 283. Move Zeroes 문제 설명 배열에서 0인 값을 오른쪽으로 이동시키는 문제 반복문을 뒤에서부터 돌아 0인 숫자는 splice하면서 push했다. 여기서 주의할 점은 반복문을 뒤에서 돌았다는 것이다. 반복문을 앞에서 돌면서 splice를 쓰게 되면 0이 연속해서 나온다면 0이 다 이동되지 않는 문제가 있다. 그래서 splice를 중복된 배열에서 사용할 때는 역순 반복을 해야 한다. 성공 코드 const moveZeroes = (nums) => { for (let i = nums.length - 1; i >= 0; i--) { if (nums[i] === 0) { nums.push(nums.splice(i, 1)) } }; return nums; };
[LeetCode] 66번 문제 - Plus One
문제 66. Plus One 문제 설명 배열을 하나의 숫자라고 생각하고, 숫자에 1이 더해졌을 때 결과배열을 반환하는 문제 처음에 9와 같이 경계선에 있는 값을 생각하고 무작정 배열을 숫자로 변환해 더했다. 자바스크립트의 숫자형이 감당할 수 없는 크기의 숫자가 배열로 나오면 Fail이 발생했다. 그것에 예외처리를 해 주기 위해 숫자를 중간부터 잘라서 더하는 일도 해 봤지만, 999999999999...와 같은 값은 계산이 불가능하다. 이 문제는 주어진 값이 배열인 점을 이용해서 반복해서 올림이 있는지 찾아내서 값을 바꿔 준다. 근데 digits.unshift(1);를 했을 때 아래 이미지처럼 자동으로 맨 앞자리가 0인 것과 아닌 것을 구분해 1을 붙여 줬다. 이에 대한 이유를 찾지 못했다. 성공 코드 실..
[LeetCode] 350번 문제 - Intersection of Two Arrays II
문제 350. Intersection of Two Arrays II 문제 설명 두 배열에서 중복되게 들어있는 값만 배열로 반환하는 문제 마땅한 더 좋은 방법이 생각이 나지 않아서 이중 반복문을 사용했다. 이중 반복문을 돌아 값을 하나씩 비교하면서 같으면 배열에 push하고 두 배열에서는 삭제하도록 했다. 삭제하지 않으면 [4,9,4,9]와 같은 중복되는 값이 걸러지지 않고 추가로 배열에 들어가 버린다. 성공 코드 const intersect = (nums1, nums2) => { let result = []; for (let i = nums1.length-1; i >= 0; i--) { for (let j = 0; j < nums2.length; j++) { if (nums1[i] === nums2[j]..
[LeetCode][Javascript] 217번 - Contains Duplicate
문제 217. Contains Duplicate 문제 설명 배열 안에 중복되는 값이 있으면 true, 없으면 false를 반환하는 문제 중복을 허용하지 않는 Set에 배열을 넣으면 간단히 해결된다. 만약 중복이 있다면 set의 크기와 원본 배열의 크기가 다를 것이다. 이를 이용해 boolean 값을 반환하도록 하면 된다. 성공 코드 const containsDuplicate = (nums) => { const set = new Set(nums); return set.size !== nums.length; };
[LeetCode][Javascript] 189번 - Rotate Array
문제 189. Rotate Array 문제 설명 1차원 배열이 전해진 숫자만큼 오른쪽으로 회전하도록 만드는 문제. 이 문제의 풀이에는 크게 두 가지가 있는 것 같다. 오른쪽에 주어진 개수만큼 분리해서 왼쪽에 붙여 회전된 결과를 만들기 하나씩 오른쪽에서 떼고 왼쪽에 붙여서 회전하기 이 중 나는 1번으로 풀었다. (2번은 생각을 못 했다) 일단, 오른쪽으로 도는 횟수인 k는 nums의 총 길이를 넘지 않도록 제어해 주어야 한다. nums의 길이를 넘어가면 undefined로 계산하게 될 것이다. (2번 방법으로 풀더라도 반복 계산을 줄이기 위해 길이에 관한 계산을 먼저 해 주는 게 좋을 것이다.) 나머지 값을 계산해 k에 다시 저장하고, 0번부터 k를 뺀 개수만큼 splice를 해 따로 배열에 저장한다. 배..