Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 다중포인터
- 구글 메일보내기
- CSS
- 카카오지도 구현
- 알고리즘
- 함수
- robots.txt
- 사이트맵
- 메일 보내기 react
- use Client
- JavaScript
- react swiper
- 전체 너비로 css
- 빈도수세기
- github
- 프론트 본인인증
- Next.js 나이스 본인인증
- 카카오맵 api
- nextjs contact us
- 프로그래머스
- nextjs
- react
- swiper
- Til
- nextjs 메일보내기
- next15
- pass인증
- web3-react
- React 나이스 신원인증
- App Router
Archives
- Today
- Total
YEV.log
알고리즘문제 | 다중포인터 패턴 본문
문제설명
오름차순으로 정렬된 int arr을 받는 sumZero라는 함수가 있다.
해당 함수는 두개의 요소의 합이 0이 되는 첫번째 쌍을 배열로 반환하며, 합이 0이 되는 요소가 없다면 undefined를 반환한다.
예시
arr | return |
[-4,-3,-2,-1,0,1,2,3,10] | [-3,3] |
[-2,0,1,3] | undefined |
[1,2,3] | undefined |
💡문제풀이
function sumZero(arr) {
let leftIdx = 0;
let rightIdx = arr.length - 1;
while (leftIdx < rightIdx) {
let sum = arr[leftIdx] + arr[rightIdx];
if (sum === 0) {
return [arr[leftIdx], arr[rightIdx]];
} else if (sum > 0) {
rightIdx--;
} else if (sum < 0) {
leftIdx++;
}
}
}
console.log(sumZero([-4, -3, -2, -1, 0, 1, 2, 3, 10])); // [-3,3]
해당 풀이의 시간 복잡도는 O(n)이며,
left, right에 해당하는 두 요소를 맨 끝에 위치시키고
sum이 0이라면 pair를 return,
sum이 음수라면 right를 한칸 앞의 index로 설정하고
sum이 양수라면 left를 한칸 뒤의 index로 설정하여 찾으면 된다.
반응형
'Algorithm > 문제' 카테고리의 다른 글
알고리즘 문제 | 빈도수세기_anagram (0) | 2023.05.10 |
---|---|
알고리즘문제 | 빈도수세기 (0) | 2023.05.03 |