일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 제로초
- til
- 알고리즘
- 리트코드
- 타임어택
- js
- javascript
- 백준
- 타입스크립트
- codestates
- 2주 프로젝트
- 프로그래머스
- 코드스테이츠
- 파이썬
- LeetCode
- 자바스크립트
- 손에 익히며 배우는 네트워크 첫걸음
- SQL 고득점 Kit
- 4주 프로젝트
- 타입스크립트 올인원
- 코어 자바스크립트
- 렛츠기릿 자바스크립트
- 토익
- Async
- 회고
- 리액트
- python
- programmers
- 리덕스
- 정재남
Archives
- Today
- Total
Jerry
[leetcode] [파이썬]Two Sum #001 본문
반응형
https://leetcode.com/problems/two-sum/description/
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashmap = {}
for i in range(len(nums)):
complement = target - nums[i]
if complement in hashmap:
return [i, hashmap[complement]]
hashmap[nums[i]] = i
이 문제를 풀기 위해 처음 접근 방법은 이중 for문을 활용했다.
그런 뒤 아래 문구처럼 시간 복잡도가 O(n2) 이하로 만족하게 작성하라는 문구를 보았다.
Follow-up: Can you come up with an algorithm that is less than O(n2) time complexity?
이 문제에서 제가 생각한 핵심 자료구조는 닥셔너리(해시)이다.
그 이유 1) 시간 복잡도가 O(1)이며 2) 임의의 숫자 키값을 이용하여 그에 응하는 값을 가져올 수 있기 때문이다.
해설
1. hashmap이란 딕셔너리 선언한다.
2. 파라미터 리스트 nums의 길이만큼 loop를 순환한다.
3. 각 인덱스마다 target과의 차(complement)를 구한다.
4. 만약 딕셔너리에 complement에 해당하는 값이 있는 경우, 해당 인덱스와 complement에 대한 딕셔너리 값을 배열에 담아 반환한다.
5. 그렇지 않을 경우, 딕셔너리에 각 인덱스 값(value)에 대한 인덱스(index)를 추가해준다.
6. 반복한다.
반응형
'Problem Solving > Algorithm 문제 풀기' 카테고리의 다른 글
[leetcode][파이썬]Roman to Integer #003 (0) | 2024.05.20 |
---|---|
[leetcode][파이썬]Palindrome Number #002 (0) | 2024.05.19 |
[day23][leetcode] 151. Reverse Words in a String (0) | 2024.03.07 |
[day23][leetcode] 557. Reverse Words in a String III (0) | 2024.03.07 |
[day22][leetcode] 561. Array Partition (1) | 2024.03.06 |