반응형

Problem Solved/LeetCode

    [LeetCode] 387번 문제 - First Unique Character in a String

    문제 387번 문제 - First Unique Character in a String 문제 설명 주어진 문자열에서 첫 번째로 유일한 문자의 index를 찾아 반환하는 문제 중복되는 값을 저장하는 duplicateMap과 유일한 값을 저장하는 uniqueMap을 생성한다. 문자열을 배열로 변환해 반복문을 돌면서 uniqueMap 또는 duplicateMap에 해당 문자가 존재하는지 확인한다. 두 Map 중에 하나에 들어가 있다면 중복 문자라는 뜻이므로 uniqueMap에서 삭제해 준다. 두 Map 어디에도 들어있지 않다면 처음 나온 글자이거나 유일한 문자이므로 uniqueMap에 담는다. 반복문이 끝나고 uniqueMap의 첫 번째 글자를 리턴한다. 만약 uniqueMap에 어떤 값도 없다면 문제의 조건대..

    [LeetCode] 36번 문제 - Valid Sudoku

    문제 36. Valid Sudoku 문제 설명 수도쿠가 유효한지 확인하는 문제 수도쿠가 유효한지 확인하려면 행, 열, 3*3 묶음에 모두 중복되는 숫자가 없어야 한다. 나는 이를 처리하기 위해 .을 제외한 숫자들을 Set에 넣어 개수를 비교하는 isValidColumn 함수를 만들었다. isValidColumn 는 9개의 한 묶음을 비교하기 위한 것이기 때문에 배열 9개 묶음이 있어야 한다. 행은 원래 그대로 비교하면 되기 때문에 그대로 비교하고, 열과 3*3은 배열 묶음으로 만들기 위해 rotateMatrix, extractMatrix 함수를 만들었다. 마지막으로 모든 결과가 true이면 true이도록 every 메소드를 사용했다. 성공 코드 const isValidSudoku = (board) => ..

    [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]..