배열 안의 두 수를 더해서 target 숫자를 만들 수 있는 두 수의 인덱스를 반환하는 문제이다.
풀이
나의 풀이
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
이중 for 문을 사용하였다.
첫 번째 숫자부터 그 뒤에 오는 숫자들을 계속 확인하며 더해서 target 숫자가 되는지 확인하고, target 숫자가 되었다면 return을 하는 방법이다.
enumerate() 함수 사용
class Solution:
def twoSum2(self, nums: List[int], target: int) -> List[int]:
nums_map = {}
for i, num in enumerate(nums):
if target - num in nums_map:
return [nums_map[target - num], i]
nums_map[num] = i
in enumerate(배열)은 배열의 원소들을 (인덱스, 원소)의 튜플 형태로 반환해 주는 함수이다.
위의 경우에는 "i = 인덱스, num = 원소"가 된다
if 함수에서는 target에서 해당 num를 뺀 수가 nums_map 딕셔너리 안에 있는지 확인하고 있다.
첫 번째 for문에는 nums_map이 비어있으므로 무조건 첫 번째 num를 {숫자 : 인덱스} 형식으로 추가한다.
다음 num을 target에서 뺀 숫자가 nums_map에 있으면 [target - num의 인덱스, num의 인덱스]를 바로 반환하고, 없다면 nums_map에 추가하면서 계속 확인한다.
'멋진 개발자 > 알고리즘' 카테고리의 다른 글
LeetCode 561. Array Partition (0) | 2024.05.27 |
---|---|
LeetCode 42. Trapping Rain Water (0) | 2024.05.24 |
LeetCode 49. Group Anagrams (0) | 2024.05.20 |
LeetCode 344. Reverse String (0) | 2024.05.19 |
LeetCode 125. Valid Palindrome (0) | 2024.05.16 |