스택에 값이 있으면, 현재 값과 비교해서 크면 스택 탑의 위치를 출력하고,
그렇지 않으면 스탭 위의 값이 클때까지 계속해서 스택을 팝시켜준다.
스택이 빌때까지 팝을 시켰다면 0을 출력하고, 현재 위치를 스택에 다시 넣는다.
for (int i = 0; i < n; i++) {
int tmp;
scanf("%d", &tmp);
while (!stack.empty()) {
if (stack.top().second > tmp) {
printf("%d ", stack.top().first);
break;
}
stack.pop();
}
if (stack.empty())printf("0 ");
stack.push(make_pair(i+1, tmp));
}
별로 어려운 문제는 아닌거 같은데 스택을 이해하고 처음으로 푸는 스택 문제라 난감했었다...
다음 스택 문제를 풀때 참고해보자.
'Algorithm' 카테고리의 다른 글
백준 2920 음계 (0) | 2020.03.01 |
---|---|
백준 2745 진법 변환 (0) | 2020.03.01 |
백준 2208 보석줍기 (0) | 2020.02.28 |
백준 2004 조합 0의 개수 (0) | 2020.02.28 |
에라스토테네스의 체와 소수 (0) | 2020.02.26 |