티스토리 뷰
오늘은 LeetCode 알고리즘 문제를 풀어보겠습니다.
처음부터 차근차근 :)
문제 제목은 Two Sum이며 설명은 아래와 같습니다.
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
정수 배열이 주어지며, 두 수를 더해 타겟이 되는 수의 인덱스를 리턴해라.
각 입력에는 하나의 답만 존재하며, 동일한 원소가 두 번 나오지 않는다고 가정한다.
음 예시를 보면 확실히 알 것 같습니다.
예를 들어 [2,7,11,15] 정수 배열과 목푯값 9가 주어집니다.
정수 배열중 두 수를 더해 목푯값을 만족하는 수의 인덱스를 리턴해줍니다.
위에서는 2와 7을 더하면 목푯값인 9가 되겠네요. ( 2 + 7 = 9 )
그럼 2와 7의 인덱스 [0,1]을 리턴해주면 됩니다.
이제 문제를 풀어봅니다.
저는 가장 먼저 생각해낸 방법이 그냥 다 확인해주는 방법입니다.
버블 정렬과 같이 for 루프를 두 번 돌면서 하나씩 다 맞춰보는 방식입니다.
시간 복잡도는 O(n^2)이며 공간 복잡도는 O(1)입니다.
여기서 시간 복잡도를 개선해보겠습니다.
시간 복잡도를 개선해 O(n^2)보다 작은 시간 복잡도를 만들어야 합니다.
또 다른 방법은 해시 테이블을 사용하는 것입니다.
for 루프를 한 번만 돌면서 target - nums[i]의 값이 해시 테이블의 키로 존재하는지를 확인합니다.
존재한다면 return 해주는 방법입니다.
아까 문제 풀이는 a + b = c 느낌으로 접근했다면 이 방법은 b = c - a 느낌으로 접근해보겠습니다.
(여기서 a와 b는 주어진 정수 배열의 각각의 값이고 c는 target이라 생각하면 될 것 같습니다.)
해시 테이블을 사용해 시간 복잡도를 O(n)으로 줄일 수 있었습니다.
하지만 해시 테이블을 사용했기 때문에 공간 복잡도는 O(n)입니다.
https://leetcode.com/problems/two-sum/
'Tech > Algorithm' 카테고리의 다른 글
Leetcode알고리즘 Binary Tree Inorder Traversal문제 (0) | 2020.09.28 |
---|---|
LeetCode알고리즘 Reverse Integer문제 (0) | 2019.12.30 |
linear search 선형탐색 vs binary search 이진탐색 (0) | 2019.12.01 |
이진탐색 binarySearch with swift (0) | 2019.10.15 |
퀵 정렬 quicksort with swift (0) | 2019.09.10 |
- Total
- Today
- Yesterday
- 책 후기
- swiftUI
- Algorithm
- wwdc
- Deep learning
- swift5
- 문자열
- 스위프트UI
- 머신러닝
- SWIFT
- RX
- ARC
- Animation
- ios
- leetcode
- iOS SwiftUI
- rxswift
- objc
- 책
- string
- 스위프트
- 알고리즘
- Xcode
- stanford SwiftUI
- 애니메이션
- objective-c
- 딥러닝
- 책 추천
- ReactiveX
- 독서
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |