티스토리 뷰
문제풀이
오큰수 (Nearest Greater Element)
오큰수란 자신의 오른쪽에 있으면서 자기 자신보다 큰 수 중에서 가장 왼쪽에 있는 수를 말한다.
그러한 수가 없는 경우에는 오큰수는 -1이다.
오큰수는 스택을 사용하여 찾을 수 있다.
예를 보면서 그 과정을 한 번 살펴보자.
A = [3, 5, 2, 7]인 수열이 있다.
오큰수를 저장할 배열 NGE를 모두 -1로 초기화하고 스택에는 수열 A의 마지막 원소를 넣어준다.
마지막 원소는 오른쪽에 수가 없으므로 오큰수는 -1이다.
따라서 오른쪽에서 두 번째 원소, A[n - 2]부터 오큰수를 찾는다.
스택의 top과 현재 원소를 비교했을 때 스택의 top이 더 클 경우에는 NGE 배열에 스택의 top을 저장하고 종료한다.
현재 원소가 스택의 top보다 더 크거나 같다면 스택의 top이 더 클 때까지 pop한다.
만약 스택이 비었다면 오큰수가 없다는 의미이므로 NGE는 -1이다.
이 과정이 끝나면 현재 원소를 스택에 넣어준다.
현재 원소가 스택의 top인 7보다 작기 때문에 NGE[3] = 7이 된다.
스택에 2를 넣고 다음 원소로 넘어간다.
2가 현재 원소인 5보다 작기 때문에 pop 해준다.
자신보다 값이 더 큰 7을 만났기 때문에 NGE[2] = 7이고 스택에 5를 넣고 다음 원소로 넘어간다.
스택의 top인 5가 현재 원소의 값 3보다 크기 때문에 NGE[1] = 3이다.
3을 스택에 넣고 더 이상 NGE를 찾을 원소가 없기 때문에 종료한다.
이렇게 첫 번째 원소까지 진행을 하면 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1을 얻을 수 있다.
코드
C++ 코드
Kotlin 코드
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ 1012] 유기농 배추 C++/Kotlin (0) | 2021.08.12 |
---|---|
[BOJ 7576] 토마토 C++/Kotlin (0) | 2021.08.12 |
[BOJ 11265] 끝나지 않는 파티 C++ (0) | 2021.07.27 |
[BOJ 10026] 적록색약 C++ (0) | 2021.07.26 |
[BOJ 10711] 모래성 C++ (0) | 2021.07.26 |
- Total
- Today
- Yesterday
- programmers
- 두 포인터
- 재귀
- 투 포인터
- BFS
- 위상 정렬
- 큐
- 알고리즘
- Kotlin
- Two Pointer
- 그래프
- dfs
- SWEA
- 정렬
- 브루트포스
- 이분 탐색
- 구현
- algorithm
- SW Expert Academy
- 트리
- Java
- 백준
- BOJ
- C++
- 문자열
- 자바
- 스택
- 배열
- 프로그래머스
- 분할 정복
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |