반응형

Problem Solved/LeetCode

    [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를 해 따로 배열에 저장한다. 배..

    [LeetCode][javascript] 122번 - Best Time to Buy and Sell Stock II

    문제 122번 - Best Time to Buy and Sell Stock II 문제 설명 가장 이익이 크게 거래 누적값을 계산하는 문제 내가 이해한 제약조건은 크게 두 가지이다. 사기 전에는 팔 수 없고, 팔기 전에는 살 수 없다. 사는 값이 바로 이후에 팔 값보다 작으면 산다. 하지만 문제의 예시와 풀이가 살짝 맞지 않는 것 같다. 내가 푼 풀이가 나중에 보니 솔루션 중 하나였지만, Example 2번은 (2-1) + (3-2) + (4-3) + (5-4) 방식으로 계산되어 답이 나온다. 어쨌든 위의 두 조건에 맞춰 반복문을 돌며 누적값을 계산해 나가도록 풀었다. 성공 코드 const maxProfit = (prices) => { let result = 0; for (let i = 0; i < pri..

    [LeetCode][Javascirpt] 15번 - 3Sum

    문제 [LeetCode][Javascirpt] 15번 - 3Sum 배열에서 3개의 수를 더했을 때 0이 되는 경우를 배열에 저장해서 리턴해 줘야 하는 문제 3개의 수는 ([-1,0,1], [-1,0,1])과 중복되어 들어 있으면 안 된다. 코드 설명 실패 코드 경우의 수만큼만 반복문을 돌게 하고 싶었는데 딱히 기억이 안 나서 반복문으로 풀었다. for문을 중첩해서 3개 쓰면 복잡도가 기본적으로 O(N^3)이다. 근데 for문을 돈다고 해서 필요한 경우의 수만 반복문을 도는 것은 아니다. 그래서 문제이다. 문제의 예제 배열은 경우의 수가 아래와 같다. 하지만 for문의 경우 모든 경우를 돌게 되어 중복한 값이 결과로 나올 수 있다. 0 1 2 0 1 3 0 1 4 0 1 5 1 2 3 1 2 4 1 2 5..

    [LeetCode][javascript] 137번 문제 - Single Number II

    문제 [LeetCode][javascript] 137번 문제 - Single Number II 문제 풀이 배열에서 1번만 등장하는 숫자를 찾아서 반환하는 문제이다. 내가 푼 코드 배열 숫자와 등장하는 횟수를 저장하기 위해 Map을 사용했다. key 값은 배열의 숫자, value 값은 숫자의 횟수를 저장한다. value가 3이 되면 map에서 삭제한다. 첫 번째 키를 반환한다. 다른 사람 코드 입력된 배열을 Set에 넣어 유니크한 값만 남게 하고, 이를 모두 합한다. 입력된 배열의 합을 구한다. 유니크한 값의 합에 3을 곱하면 모든 값이 3번씩 들었을 경우이다. 하지만 문제에서 그런 경우는 없다고 했으므로 여기에 배열합 값을 빼 주고 2를 나누면 원하는 1번 등장하는 배열값이 나오게 된다. reduce를 ..

    [LeetCode][javascript] 345번 문제 - Reverse Vowels of a String

    문제 345번 문제 - Reverse Vowels of a String 문제 설명 문자열에서 모음(aeiou)만 반대 순서로 뒤집는 문제 내가 푼 코드 입력받은 문자열을 배열로 만든다. 모음의 인덱스를 저장할 빈 배열과 모음을 저장하는 문자열을 만든다. 반복문을 돌며 모음인 문자열(대문자 포함)의 인덱스를 2번에서 만든 배열에 추가한다. 반복문을 돌며 만들어진 배열을 배열의 크기의 반만큼 반복되게 한다. 반복문을 돌며 해당 인덱스에 해당하는 모음을 반대로 저장시킨다. join을 사용해 문자열로 만들고 반환한다. 풀이 코드 정규표현식과 고차함수인 filter를 활용해 모음만 있는 문자열을 배열로 저장한다. 정규표현식의 test() 메소드는 대상 문자열 속에 일치하는 문자열이 포함되어 있는지 검사하고 tru..