분류 전체보기
[LeetCode] 125번 문제 - Valid Palindrome
문제 125. Valid Palindrome 문제 설명 문자열의 영숫자가 회문인지 판별하는 문제 정규식을 활용해 영숫자만 배열로 저장한다. 이제 저장된 배열이 회문인지 확인하면 되는데, 들어온 문자열이 ".,"와 같은 경우 길이가 없다고 나오므로 if문을 통해 예외처리를 해준다. 이 때, 꼭 배열 자체를 비교할 필요는 없다. join을 활용해 문자열로 만들고, 그것을 뒤집은 값과 비교해도 된다. 여기서 나는 배열인 채로 비교했다. 그리고 전체 배열 크기의 반을 구한 다음에 그만큼만 반복문을 돌면서 값이 같은지 확인한다. 하나라도 다르면 false가 되어 결과로 반환하게 된다. 성공 코드 const isPalindrome = (s) => { const regex = /(\w)/g; const onlyAlp..
[LeetCode] 242번 문제 - Valid Anagram
문제 242. Valid Anagram 문제 설명 주어진 문자열이 유효한 anagram인지 아닌지 판별하는 문제 문자열의 길이와 알파벳 구성(개수)가 동일하면 true, 아니면 false를 반환하게끔 해야 한다. 처음에는 반복문을 돌게 해 값을 하나하나 비교해 참거짓을 반환했는데, 그냥 비교할 수 있는 방법이 있어서 그렇게 바꿔서 사용했다. 자바스크립트의 경우 배열 자체를 비교할 수 있는 메소드는 없지만 값을 json 문자열로 만들어 주는 *JSON.stringify 를 이용해 두 배열을 비교했다. 아니면 아예 join("") 을 사용해 문자열을 만들어 문자열끼리 비교해 줄 수도 있다. 성공 코드 const isAnagram = (s, t) => { if (s.length !== t.length) ret..
[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; };