{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉연결 리스트〉재생목록 짧은 곡 정리← 이전다음 →
#118 · 연결 리스트쉬움순회,노드 삭제,더미 헤드

재생목록 짧은 곡 정리

문제

음악 앱의 재생목록은 연결 리스트 로 저장되어 있습니다. 각 노드의 val은 곡의 재생시간(초)이고, next는 다음 곡을 가리킵니다.

사용자가 "짧은 곡 정리" 버튼을 누르면, 재생시간이 limit초 이하 인 곡을 재생목록에서 모두 제거 해야 합니다. 남은 곡들의 순서는 원래 순서를 유지합니다.

재생목록의 첫 노드 head와 기준 시간 limit이 주어질 때, 정리된 재생목록의 첫 노드를 반환하는 solution(head, limit) 함수를 작성하세요. 모든 곡이 제거되어 재생목록이 비면 null을 반환합니다.

class ListNode {
  val: number;          // 곡의 재생시간(초)
  next: ListNode | null; // 다음 곡
}
 
function solution(head: ListNode | null, limit: number): ListNode | null
  • 첫 곡(머리 노드)부터 연속으로 제거될 수도 있다는 점에 주의하세요.
  • 테스트 입력/출력은 편의상 배열로 표기하지만, 실제로는 연결 리스트로 변환되어 전달되고 반환한 리스트가 다시 배열로 변환되어 채점됩니다.

예시

head limit 결과 설명
[180, 95, 210, 60, 240] 100 [180, 210, 240] 95초·60초 곡 제거
[30, 45, 200, 50, 300] 60 [200, 300] 머리에서 연속 두 곡 제거
[10, 20, 30] 60 [] 전부 제거되어 빈 목록
[120, 150] 100 [120, 150] 제거할 곡 없음
  • 예시 1: 100초 이하 인 곡(95, 60)만 사라지고 나머지는 순서 그대로 남습니다.
  • 예시 2: 첫 곡부터 조건에 걸리면 머리 노드 자체가 바뀝니다.

제약 조건

  • 재생목록의 곡 수: 0 이상 10,000 이하 (빈 목록이면 head는 null)
  • 각 곡의 재생시간 val: 1 이상 100,000 이하의 정수
  • limit: 1 이상 100,000 이하의 정수
  • 재생시간이 limit과 같은 곡도 제거 대상입니다 (이하 조건).
  • 배열로 복사해 새로 만들지 말고, 리스트를 한 번 순회하며 연결을 고쳐 보세요.

시간 복잡도 목표: O(n), 추가 공간 O(1)

테스트 케이스

예시 1: 중간의 짧은 곡 두 개 제거
입력: head = [180,95,210,60,240], limit = 100
출력: [180,210,240]
예시 2: 머리에서 연속 제거
입력: head = [30,45,200,50,300], limit = 60
출력: [200,300]
예시 3: 전부 제거되어 빈 목록
입력: head = [10,20,30], limit = 60
출력: []
예시 4: 제거할 곡 없음
입력: head = [120,150], limit = 100
출력: [120,150]
solution.ts
에디터 로딩 중…

▶ 실행은 기록 없이 채점만, 제출은 결과가 진행률·오답노트에 기록됩니다.