강의로 돌아가기
박인서

O(n) 시간복잡도 풀이법 힌트

sliding window와 Deque 자료구조를 이용합니다.

stones 배열을 (index, value) 쌍으로 매핑한 뒤 순회합니다.

1. Deque 에 뒤에서부터 집어 넣습니다.

2. Deque의 마지막 원소가 집어넣을 원소보다 작다면, pop 해줍니다.

3. Deque의 첫번째 원소가 현재 index - k 를 벗어났다면, pop 해줍니다.

이렇게 하면 Deque[0]해당 구간의 max 값입니다.
Deque 자료구조는 head 와 tail 의 삽입, 삭제가 모두 O(1) 이기에 max 값을 O(1) 시간에 구할 수 있습니다.
answer 은 여기서 구해진 max 값 중 가장 작은 값이 됩니다.

예시)
stones: [7, 2, 8, 7, 5, 2, 9], k: 3 일 때,

index: 0, [7, 2, 8, 7, 5, 2, 9]
Deque: []
answer: INF

index 1, [7, 2, 8, 7, 5, 2, 9]
Deque: [7, 2]
answer: INF k보다 index가 작을 때는 answer를 update 하지 않음

index 2, [7, 2, 8, 7, 5, 2, 9]
Deque: [8] - 7, 2 는 8보다 작아 pop.
answer: min(INF, 8) = 8

index 3, [7, 2, 8, 7, 5, 2, 9]
Deque: [8, 7]
answer: min(8, 8) = 8

index 4, [7, 2, 8, 7, 5, 2, 9]
Deque: [8, 7, 5]
answer: min(8, 8) = 8

index 5, [7, 2, 8, 7, 5, 2, 9]
Deque: [7, 5, 2] - 8은 인덱스 범위 벗어나 pop.
answer: min(8, 7) = 7

index 6, [7, 2, 8, 7, 5, 2, 9]
Deque: [9]
answer: min(7, 9) = 7

  • minsang0610@hanyang.ac.kr

    감사합니다 선생님

    minsang0610@hanyang.ac.kr―2023.06.07 13:54
  • HyoJeongLee

    해볼게요 감사합니다 선생님

    HyoJeongLee―2024.02.22 19:42
  • Denia-park

    감사합니다

    Denia-park―2024.03.04 15:39
  • 고동우

    감사합니다 ㅎㅎ

    고동우―2024.04.04 13:25
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.