[Array] 3Sum

2021. 3. 31. 17:12프로그래밍-코딩테스트/LeetCode

배열의 subset인 triplet을 구해서, 해당 원소의 총합이 0이 되는 배열을 묶어 리턴하라는 문제다.

 

오름차순으로 배열을 정렬한다.

이후 포인터를 3개 두고 Loop를 돌린다.

i는 고정시키고 나머지 두개의 포인터를 조절하는 방식으로 로직을 짯다.

이때 i와 i-1이 같다면, i-1을 검사할때 i도 검사된거나 다름 없으므로 continue를 사용하여 검사하지 않도록 한다.

여느 투포인터 검사처럼 r이 l보다 큰 시점까지만 검사해주고, 조건에 부합하는 solution은 리턴배열에 push한다.

이때 l은 늘리기만, r은 줄이기만 하는 검사를 진행하는데, 인접 원소와 값이 같다면 검사를 건너뛸 수 있도록 while문으로 처리해준다.

또한 sum이 음수라면 l을 옮기고, 양수라면 r을 줄이는 식으로 조건을 바꿔가며 테스트한다.

'프로그래밍-코딩테스트 > LeetCode' 카테고리의 다른 글

[Array, Hash] Subarray Sum Equals K  (0) 2021.03.31
[DP] Longest Palindromic Substring  (0) 2021.03.31
[DP] Coin Change  (1) 2021.03.31
[Recursion] Letter Combinations of a Phone Number  (0) 2021.03.31
[Array] Sort Colors  (0) 2021.03.31