반응형

Problem Solved/LeetCode

    [LeetCode][javascript] 344번 문제 - Reverse String

    [LeetCode][javascript] 344번 문제 - Reverse String

    문제 344번 문제 - Reverse String 문제 설명 내가 푼 코드 문제에 새로운 공간을 만들지 않고 시간 복잡도를 O(1)라고 해서, 반복문을 전체 배열 길이의 반만큼 돌며 값을 swap하도록 했다. 솔루션 코드 열심히 생각해서 풀고 솔루션을 봤는데 Life is short, use Python. (c)문구와 함께 한 줄의 코드만 있었다. 자바스크립트에도 있는 메소드라 그대로 적용했는데 통과됐다. 시간도 반복문 돌때랑 차이가 별로 없었다. 문제를 봤을 때 가장 간단한 해결법을 생각하는 연습도 필요할 것 같다. 성공 코드 내가 푼 코드 const reverseString = s => { const SIZE = s.length; const halfIndex = Math.floor(SIZE / 2);..

    [LeetCode][Javascript] 136번 - Single Number

    문제 [LeetCode][Javascript] 136번 - Single Number 문제 설명 배열에서 중복되지 않는 하나의 수를 찾는 문제 splice 사용 Set에 for문을 돌면서 중복값이 없는 수만 저장해도 되겠지만 문제에서는 기존 배열에서 처리하라는 말인 것 같아 쓰지 않았다. 숫자들을 정렬해 인덱스 뒤의 숫자부터 for문으로 중복되는 숫자들을 지워 나간다. 그러면 마지막에 남는 수가 중복되지 않은 하나의 수가 된다. XOR 연산 사용 미쳤다 너무 간단하게 해결된다. 문제에서 중복되는 숫자가 있으면 2번 들어있으니 XOR로 배열의 모든 숫자를 계산한다. XOR은 숫자를 2진수로 변환해 각 숫자가 같으면 0, 다르면 1로 나타내어지는 연산자이다. 즉, 같은 숫자를 비트 연산자로 계산하면 0이 된다..

    [LeetCode][Javascript] 202번 - Happy Number

    문제 [LeetCode][Javascript] 202번 - Happy Number 문제 설명 숫자로 입력한 입력값 n을 문자열로 변환해 1글자씩 끊어 배열에 저장한다. 배열에서 reduce를 활용해 제곱합을 구해 calculate 변수에 저장한다. dp라는 배열에 이미 calculate 값이 이미 있다면 무한 반복하게 될테니 그것을 방지하기 위해 이미 있는 값이면 멈추고 false를 만환한다. dp에 없는 수이면 dp 배열에 추가한다. 반환값에 함수를 넣어 주면서 재귀적으로 실행될 수 있도록 한다. 성공 코드 const isHappy = (n, dp = []) => { if (n === 1) return true; let nArray = String(n).split(''); let calc..

    [LeetCode][Javascript] 26. Remove Duplicates from Sorted Array

    문제 [LeetCode][Javascript] 26. Remove Duplicates from Sorted Array 문제 설명 주어진 정렬된 배열의 중복값을 없앤 길이를 출력하는 문제. 단, 주어진 배열을 수정해야 함(새롭게 만들면 안됨) 고차함수는 사용할 수 없는 문제라고 생각하면 될 것 같다. 처음에 Set과 filter를 사용해 보았지만 틀린 답이라고 나왔다. 그래서 for문에 splice를 사용했다. splice는 값을 삭제만 하는 기능도 있기 때문이다. 근데 인덱스를 0번부터 1씩 커가는 식으로 돌리면 3개 이상 중복인 값은 제대로 지워지지 않는다. 사실 이전에 다른 문제를 풀면서도 겪었던 문제인데, 간단하게 뒤에서부터 돌려주면 된다. 나처럼 하지 않고 새로운 length 변수를 만들어 거기에..

    [LeetCode][Javascript] Easy - Reverse Integer

    문제 [LeetCode][Javascript] Easy - Reverse Integer 문제 설명 숫자를 뒤집어서 출력하는 문제. 주의할 점 음수일 경우에는 음수는 유지한 채 숫자만 reverse되어야 한다. reverse했을 때 제일 앞자리가 0이면 0은 생략되어 출력된다. 즉, 타입이 number여야 한다. 결과값 양음수 모두 2의 31승을 넘어가면 0을 출력하게 해야 한다. 문제 자체는 쉬운데 문제를 안읽어서 헤맸다... reverse는 내장함수를 이용해 배열로 바꾸고 reverse한 뒤 다시 합쳐 숫자형으로 바꿔 주면 된다. 성공 코드 const reverse = x => { const MAX_NUMBER = Math.pow(2, 31); const abs_number = Math.abs(x); ..