LeetCode TwoSum
예제
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
내가 푼 풀이
func twoSum(nums []int, target int) []int {
resultValue := make([]int, 2)
for i := 0; i < len(nums); i++ {
for j := 0; j < len(nums); j++ {
if i == j {
continue
}
if nums[i]+nums[j] == target {
resultValue[0] = i
resultValue[1] = j
return resultValue
}
}
}
return resultValue
}
내가 생각한 방식 O(n2)
위 코드에서는 반복문 두번을 통해서 촤익의 경우, O(n2)
의 무차별 대입 연산이 나오도록 설계했고,
간단하게 생각해서 i==j
가 같은 경우에는 continue를 통해서 다음 연산으로 넘어가게 만들었다.
그리고, nums[i]
와 num[j]
를 더한 값이 목표값과 같은 경우에는 resultValue에 자릿수를 기입을
통해서, return
하게 됩니다.
해쉬 테이블 O(n)
func twoSum(nums []int, target int) []int {
var map1 = make(map[int]int)
for idx, numi := range nums {
num := target - numi
if j, ok := map1[num]; ok {
return []int{j, idx}
}
map1[numi] = idx
}
return []int{0, 0}
}
리뷰
데이터를 활용을 잘하는 방법인 것 같습니다.
이미 있는 데이터를 가지고 다음 반복문이 올 때, 지금의 데이터를
활용할 수 있는 방안(map)
을 제공해주는 것 입니다.
'알고리즘 > 문제' 카테고리의 다른 글
ATM - 11399 (C++) (0) | 2024.01.18 |
---|---|
LeetCode, Longest Substring Without Repeating Characters (Golang) (0) | 2022.01.27 |
백준 9012 괄호 - C++ 풀이 공유 (0) | 2021.02.24 |
BOJ 10163 색종이 - C++ 풀이공유 (0) | 2021.02.16 |
백준 1316 그룹 단어 체커 - C++ 풀이공유 (0) | 2021.02.13 |