티스토리 뷰
문제 파악

- 배열 내부에 있는 요소들의 합이 우리가 원하는 target 정보와 일치하는 경우에 해당 인덱스 두 가지를 리턴
- 제공되는
nums는 중복되는 숫자가 있을 수 있고, 두 개를 결정한다는 특징이 존재 - 정답이 될 수 있는 답은 하나
[제약 사항]
10^4 까지 이뤄지기 때문에 O(n^2) 의 경우에는 10^8 까지 이뤄질 수 있어, 위험할 가능성이 있다.
접근 방법
O(n^2)의 해결 방법 (완전 탐색)
중첩 반복문을 활용하여 배열의 각 요소를 돌며, sum이 target과 같은지 확인nlogn의 해결 방법?
좀 더 개선하는 방법? (nlogn,logn정도 있을 것 같다.)nlogn은 정렬의 시간 복잡도 → 리스트를 정렬하면 새로운 방식이 보이지 않을까?
좌, 우에서 차례대로 접근하면서 쓸 수도 있지 않을까?- 해시맵을 사용하는 방법?
해시맵을 통해서 저장하면서 Target을 만드는데 필요한 숫자가 해시맵에 존재하는지 확인하여,O(1)의 시간복잡도로 확인하는 방법 →wow…
코드 구현
O(n^2)
class Solution {
public int[] twoSum(int[] nums, int target) {
int sum = 0;
int[] result = new int[2];
for (int i = 0 ; i < nums.length ; i++) {
for (int j = 0 ; j < nums.length ; j++ ){
if (i == j) continue;
sum = nums[i] + nums[j];
if(sum == target) {
result[0] = i;
result[1] = j;
}
}
}
return result;
}
}l, r
import java.util.Arrays;
class Solution {
public int[] twoSum(int[] nums, int target) {
// 정렬을 진행
Arrays.sort(nums);
// 좌우 인덱스 설정
int l = 0, r = nums.length - 1;
while(l < r) {
if(nums[l] + nums[r] < target) {l += 1;}
else if(nums[l] + nums[r] > target) {r -= 1;}
else {break;}
}
return new int[] {l, r};
}
}Hashmap
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> memo = new HashMap<>();
for(int i = 0; i < nums.length; i++) {
int needed = target - nums[i];
if(memo.containsKey(needed)) {
return new int[] {memo.get(needed), i};
}
memo.put(nums[i], i);
}
return new int[] {-1, -1};
}
}배우게 된 점
해시맵을 사용하면서 접근하는 방식은 처음으로 알게된 것 같다.
HashMap의 연산
- key-value 쌍 추가하기
hashtable.put(2022390, "노정호");- key에 해당하는 value 접근하기
hashtable.get(2023390); // "노정호"- key에 해당하는 value 수정하기
hashtable.replace(2023390, "이승규");- key-value 쌍 제거
hashtable.remove(2023390);- 해당 key가 존재하는지 확인 (containsKey() - 시간복잡도 O(1))
if (hashtable.containsKey(2023390)) { System.out.println(hashtable.get(2023390)); // 키가 있다면 출력 } else { System.out.println("저장된 키가 없습니다."); }
시간 복잡도를 고려하면서, 접근할 수 있는 방법을 고려하는 방식을 통해서 내가 가진 자료구조 혹은 알고리즘 중 어떤 것으로 구성해볼지 생각하는 사고를 통해서 접근해봐야겠다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 완전탐색
- Generic
- 제네릭
- TypeScript
- 프론트엔드
- 리액트 상태관리
- react
- 리액트
- 타입 선언
- 자바스크립트 const let var 차이
- leetcode
- 변수 별 차이
- 자바스크립트 변수
- const let var 차이
- 타입스크립트
- JavaScript
- two sum
- 자바스크립트
- 상태관리
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함
