80. Remove Duplicates from Sorted Array II

2025. 10. 15. 16:59·Coding Test/LeetCode

난이도: 중간 (Medium)

링크: LeetCode 80

풀이 날짜: 2025/10/15

 

1. 문제 이해

정렬된 배열 nums가 주어졌을 때, 중복된 원소가 최대 2번까지만 나타나도록 배열을 수정해야 한다.

추가 배열을 사용하지 않고 제자리(in-place) 에서 해결해야 한다.

즉, 각 원소는 최대 두 번까지만 남길 수 있고, 그 이후의 중복은 제거해야 한다.

 

2. 접근 방식

이 문제는 투 포인터(Two Pointers) 를 활용하는 전형적인 배열 조작 문제이다.

LeetCode 26번 문제(“Remove Duplicates from Sorted Array”)의 확장 버전이라고 볼 수 있다.

 

핵심 아이디어

  1. k 포인터를 이용해 “결과 배열의 길이”를 관리한다.
  2. 현재 원소 nums[i] 가 결과 배열의 두 칸 전(nums[k-2])과 다를 때만 새로 추가한다. 즉, nums[k-2] 와 같다면 이미 같은 원소가 2번 존재하므로 건너뛴다.
  3. 배열을 순회하면서 최대 2개의 중복까지만 유지한다.

 

3. 풀이코드

var removeDuplicates = function(nums) {
  if (nums.length < 3) return nums.length; // 길이가 2 이하라면 그대로 유지

  let k = 2; // 최대 2번까지 허용

  for (let i = 2; i < nums.length; i++) {
    if (nums[i] !== nums[k - 2]) {
      nums[k] = nums[i];
      k++;
    }
  }

  return k;
};
  • 시간 복잡도: O(n) — 배열을 한 번 순회한다.
  • 공간 복잡도: O(1) — 추가 메모리를 사용하지 않는다.

 

시뮬레이션

nums = [0,0,1,1,1,1,2,3,3]

단계 i nums[i] nums[k-2] 조건 결과 (nums) k
초기 - - - - [0,0,1,1,1,1,2,3,3] 2
2 2 1 0 ✅ 다름 [0,0,1,1,1,1,2,3,3] 3
3 3 1 0 ✅ 다름 [0,0,1,1,1,1,2,3,3] 4
4 4 1 1 ❌ 같음 (변화 없음) 4
5 5 1 1 ❌ 같음 (변화 없음) 4
6 6 2 1 ✅ 다름 [0,0,1,1,2,…] 5
7 7 3 1 ✅ 다름 [0,0,1,1,2,3,…] 6
8 8 3 2 ✅ 다름 [0,0,1,1,2,3,3] 7

최종 반환값은 k = 7이며, 결과 배열은 [0,0,1,1,2,3,3,_,_] 이 된다.

 

4. 핵심 및 마무리

  • 중복 허용 개수를 일반화할 수 있다 (k - 2 → k - N 형태로 확장 가능).
  • nums[i] !== nums[k - 2] 조건이 중복을 2개까지만 허용하는 핵심이다.
  • in-place 조작으로 메모리 효율성이 높다.
  • “중복은 두 번까지만, 나머지는 건너뛴다.” — 투 포인터로 중복 제한 처리하기

'Coding Test > LeetCode' 카테고리의 다른 글

55. Jump Game  (0) 2025.10.15
122. Best Time to Buy and Sell Stock II  (0) 2025.10.15
189. Rotate Array  (0) 2025.10.15
121. Best Time to Buy and Sell Stock  (0) 2025.10.15
169.Majority Element  (0) 2025.10.15
'Coding Test/LeetCode' 카테고리의 다른 글
  • 55. Jump Game
  • 122. Best Time to Buy and Sell Stock II
  • 189. Rotate Array
  • 121. Best Time to Buy and Sell Stock
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;)
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
        • Web Development
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • React
        • Next.js
        • Flutter
        • Testing
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test
        • LeetCode
        • Programmers
      • Tech Books & Lectures
        • Javascript_Modern JS Deep d..
        • Network_IT 엔지니어를 위한 네트워크 입문
      • Projects
        • PolyLingo_2025
        • Build Your Body_2024
        • JStargram_2021
        • Covid19 Tracker_2021
        • JPortfolio_2021
      • BootCamp_Codestates
        • TIL
        • TILookCloser
        • Pre Tech Blog
        • IM Tech Blog
        • Daily Issues and DeBugging
        • First Project
        • Final Project
        • Sprint Review
        • Good to Know
        • Socrative Review
        • HTML &amp; CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 글쓰기
    • 관리
  • 공지사항

  • 인기 글

  • 태그

    How memory manage data
    이벤트
    TCP/IP
    Network
    Time complexity and Space complexity
    mobile app
    Threads and Multithreading
    database
    스코프
    딥다이브
    DOM
    Data Structure
    자바스크립트
    자바스크립트 딥다이브
    Binary Tree BFS
    Operating System
    CPU scheduling algorithm
    커리어
    프론트엔드 성능 최적화 가이드
    js pattern
    structure of os
    polylingo
    Javascript Essentials
    testing
    leetcode
    indie hacker
    모던 자바스크립트 Deep Dive
    VoiceJournal
    Shared resources
    need a database
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
80. Remove Duplicates from Sorted Array II
상단으로

티스토리툴바