문제
크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다.
예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다.
입력
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
출력
총 N개의 수 NGE(1), NGE(2), ..., NGE(N)을 공백으로 구분해 출력한다.
출처 : 백준 17298번 오큰수
정답:
해당수열 오른쪽에 더 큰 수들의 값중 가장 왼쪽에 있는 값을 추출해내는 문제
1:stack []
2:stack[0]
3:stack[1]
4:stack[1,2]
즉 stack[-1]은 스택의 제일 마지막 값이고 numbers[i]는 list값 순서대로 출력
한것을 비교한다.만약 stack[-1]값보다 numbers[i]의 값이 더 크게나온다면
answer=[-1,-1,-1,-1] stack의 제일마지막값을 answer의 인덱스로 사용하고
그 인덱스값에 number[oi]를 넣어준다.
- 따라서
1. stack을 하나 만들고
2. -1이 n개 있는 blueprint를 만든다 - 그 후 for문을 한번 돌리면서
1. stack에 무언가 존재하고 && arr[stack에 들어있는 마지막 값] 과 arr[i]를 비교했을 때 마지막 값보다 arr[i]가 더 크면 blueprint[stack에 들어있는 마지막 값]을 arr[i]로 바꾼다
2. stack에 i를 append한다
문제는어렵지않았지만 풀이하는데 꽤 어려웠던것같다.
더 열심히 노력해야겠다 ...
'코딩테스트 문제풀이' 카테고리의 다른 글
14916 거스름돈 (0) | 2022.10.17 |
---|---|
17413 단어뒤집기 2 백준온라인 (0) | 2022.10.17 |
백준 16953번 A->B (1) | 2022.10.13 |
백준 5397번 키로거 (0) | 2022.10.10 |
백준 1715번 카드정렬하기 (0) | 2022.10.09 |