3Sum

2025. 1. 12. 19:08·PS/LeetCode
반응형

문제

https://leetcode.com/problems/3sum/description/

입력

3 <= nums.length <= 3,000 // Int 배열 
-10^5 <= nums[i] <= 10^5

결과

ans: [[Int]] = 중복되지 않은 3개 숫자의 합이 0이되는 조합 배열 
ex) [[-1,-1,2],[-1,0,1]]

해석

2포인터 개념에 하나의 트릭을 숨겨논 문제로 해석된다.

3개의 합이 0이되는 지 검사해야하는데 2포인터로 접근하려면 어떻게야할까 ??

 

간단하게 한개를 고정하고 나머지 2개만 움직이면 된다.

 

배열의 길이가 최대 3000이므로 정렬을 통해 조금 더 쉽게 포인터를 움직일 수 있는 전처리를 수행한 후 


중복이 허용되지 않으므로 같은 값이 있을 경우 과감히 다음 값으로 넘어간다.

 

여기서 내가 고정할 값은 i 이며 , j를 바로 i 다음, j를 오른쪽 끝에서 시작해서 조건에 맞게 움직이자.

코드

class Solution {
    func threeSum(_ nums: [Int]) -> [[Int]] {
        let n = nums.count
        let nums = nums.sorted()
        var ans: [[Int]] = []

        for i in 0..<n {
            if i > 0 && nums[i] == nums[i-1] { // 중복값 건너뜀
                continue 
            }

            var j = i+1 
            var k = n-1

            while j < k {
                let acc = nums[i] + nums[j] + nums[k]

                if acc > 0 { // 오른쪽 포인터 이동
                    k -= 1 
                } else if acc < 0 { // 왼쪽 포인터 이동
                    j += 1 
                } else {
                    ans.append([nums[i], nums[j], nums[k]])
                    j += 1

                    while j < k && nums[j] == nums[j-1] { // 중복된 값 건너뜀
                        j += 1 
                    } 
                }
            }
        } 
        
        return ans
    }
}

 

반응형

'PS > LeetCode' 카테고리의 다른 글

Climbing Stairs  (1) 2025.02.02
Container With Most Water  (0) 2025.01.12
Search in Rotated Sorted Array  (0) 2025.01.09
Find Minimum in Rotated Sorted Array  (0) 2025.01.08
Maximum Product Subarray  (0) 2025.01.08
'PS/LeetCode' 카테고리의 다른 글
  • Climbing Stairs
  • Container With Most Water
  • Search in Rotated Sorted Array
  • Find Minimum in Rotated Sorted Array
Hamp
Hamp
남들에게 보여주기 부끄러운 잡다한 글을 적어 나가는 자칭 기술 블로그입니다.
  • Hamp
    Hamp의 분리수거함
    Hamp
  • 전체
    오늘
    어제
    • 분류 전체보기 (308) N
      • CS (30)
        • 객체지향 (2)
        • Network (7)
        • OS (6)
        • 자료구조 (1)
        • LiveStreaming (3)
        • 이미지 (1)
        • 잡다한 질문 정리 (0)
        • Hardware (2)
        • 이론 (6)
        • 컴퓨터 그래픽스 (0)
      • Firebase (3)
      • Programing Langauge (38) N
        • swift (32)
        • python (5) N
        • Kotlin (1)
      • iOS (132)
        • UIKit (37)
        • Combine (1)
        • SwiftUI (32)
        • Framework (7)
        • Swift Concurrency (22)
        • Tuist (6)
        • Setting (11)
        • Modularization (1)
        • Instruments (6)
      • PS (59)
        • 프로그래머스 (24)
        • 백준 (13)
        • LeetCode (19)
        • 알고리즘 (3)
      • Git (18)
        • 명령어 (4)
        • 이론 (2)
        • hooks (1)
        • config (2)
        • action (7)
      • Shell Script (2)
      • Linux (6)
        • 명령어 (5)
      • Spring (15) N
        • 어노테이션 (3) N
        • 튜토리얼 (11)
      • CI-CD (4)
      • Android (0)
        • Jetpack Compose (0)
      • AI (1) N
        • 이론 (1) N
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    boostcamp
    SwiftUI
    property
    CS
    GIT
    투포인터
    Swift
    lifecycle
    Tuist
    dp
    dfs
    concurrency
    dispatch
    protocol
    Spring
    AVFoundation
    백준
    UIKit
    프로그래머스
    IOS
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
Hamp
3Sum
상단으로

티스토리툴바