Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Leetcode - Easy] Two Sum #1

Merged
merged 5 commits into from
Nov 6, 2024
Merged

[Leetcode - Easy] Two Sum #1

merged 5 commits into from
Nov 6, 2024

Conversation

BangDori
Copy link
Contributor

@BangDori BangDori commented Nov 5, 2024

문제

Type Info
Platform Leetcode
Level Easy
Link https://leetcode.com/problems/two-sum/

풀이

이차원 반복문을 통해 해결할 수 있는 문제이지만 시간 복잡도가 O(N^2)이므로, O(N)을 이용하여 해결

  1. 우선 주어진 nums 배열을 오름차순 정렬하고, 배열 내부에서 왼쪽과 오른쪽의 포인터 변수를 각각 생성
  2. 왼쪽 포인터가 가르키는 값과 오른쪽 포인터가 가르키는 값을 더하기
  3. 두 값의 합이 만약 target보다 크다면 오른쪽 포인터를 왼쪽으로 이동, target보다 작다면 왼쪽 포인터를 오른쪽으로 이동
  4. 동일하다면 기존 nums배열에서 왼쪽 포인터와 오른쪽 포인터의 값이 가지는 위치를 구하기
  5. (속도 개선) 오른쪽 인덱스를 정렬된 배열의 마지막 값이 아닌 target - 0번째 인덱스의 값으로 설정
const answer = [];
const sortedNums = [...nums].sort((a, b) => a - b);

let leftPos = 0;
let rightPos = sortedNums.findLastIndex(num => num <= target - sortedNums[leftPos]);

어려웠던 점

  • 단순하게 twoSum 메서드 내부에서 모든 로직을 작성하여 해결할 수 있는 문제임에도 불구하고, 불필요한 함수 분리를 고려한 것이 오히려 머리를 복잡하게 만든 것 같음.

알게된 점

  1. 기존 배열과 동일한 배열을 만들기 위해서는 스프레드 연산자를 활용하는 것이 적합하다.
const newNums = nums; // 🚨 동일한 포인터를 나타내기에 기존 nums가 변경되면 newNums도 변경
const newNums = [...nums]; // ✅ 스프레드 연산자를 이용하여 기존 배열의 값과 동일한 새로운 배열을 생성
  1. 자바스크립트의 sort 메서드는 정렬된 배열을 반환하면서 기존의 배열까지도 정렬한다.
const nums = [3, 1, 2];
const sortedNums = nums.sort();

console.log(nums); // [1, 2, 3]
console.log(sortedNums); // [1, 2, 3]
  1. indexOf는 배열의 0부터 시작해서 값을 읽고, lastIndexOf는 배열의 뒤에서부터 값을 읽는다.
const nums = [3, 3];

console.log(nums.indexOf(3)); // 0
console.log(nums.lastIndexOf(3)); // 1

@BangDori BangDori merged commit fdbf583 into main Nov 6, 2024
@BangDori BangDori deleted the bangdori branch November 6, 2024 14:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant