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
- 구글 메일보내기
- 메일 보내기 react
- 알고리즘
- 함수
- pass인증
- nextjs 메일보내기
- 빈도수세기
- 전체 너비로 css
- 프론트엔드 질문
- swiper
- 프론트 본인인증
- next.js kakaomap
- Next.js 나이스 본인인증
- 다중포인터
- 프로그래머스
- 카카오맵 api
- 카카오지도 구현
- react swiper
- next.js 지도 구현
- react
- web3-react
- 사이트맵
- Til
- nextjs contact us
- React 나이스 신원인증
- CSS
- nextjs
- JavaScript
- robots.txt
- github
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 |