Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- --watch
- Digital Ocean
- java
- unity
- critical rendering path
- SDK upgrade
- springboot
- Camera Movement
- react
- Google Developer API
- Camera Zoom
- Unity Editor
- server
- mongoDB
- OverTheWire
- Unity IAP
- nodejs
- screencapture
- docker
- rpg server
- spread 연산자
- draganddrop
- Packet Network
- Git
- linux
- Spring Boot
- MySQL
- css framework
- express
- Google Refund
Archives
- Today
- Total
우당탕탕 개발일지
[프로그래머스] Level 2. 뒤에 있는 큰 수 찾기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/154539
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
해결 방법
뒤에 나보다 큰 수를 for문으로 찾으면 시간초과 문제가 발생한다. 적절한 자료구조를 이용해 빨리찾는 것이 핵심.
- 스택을 만들고, 내 앞에 있는 숫자보다 작으면 그냥 넣는다. 만약 [9,3,2,5] 가 있다면 9 > 3 > 2 까지는 그대로 스택에 넣는다. 참고로 스택에는 index값을 넣는다.
- 만약 앞에 넣은 숫자보다 큰 숫자가 나왔다면,이제 작업을 시작할 때이다. 큐에서 하나씩 빼면서, 나자신보다 작은지 검사하여 만약 나보다 작다면 정답을 적어주고 스택에서 제거한다.
- 나 자신도 검사를 받아야하므로, 스택에 넣어준다.
#include <string>
#include <vector>
#include <stack>
using namespace std;
vector<int> solution(vector<int> numbers) {
stack<int> s;
vector<int> answer(numbers.size(), -1);
for(int i=0; i<numbers.size(); i++){
//스택에 있는 값이 나보다 크다면 스택에 넣고 패스
if(s.empty() || numbers[s.top()] > numbers[i]){
s.push(i);
continue;
}
while(!s.empty()){
//나보다 큰 놈이 나오기전까지 뽑아서 처리
if(numbers[s.top()] >= numbers[i])break;
answer[s.top()] = numbers[i];
s.pop();
}
s.push(i);
}
return answer;
}
'Algorithm(c++) > Level 2' 카테고리의 다른 글
[프로그래머스] Level 2. 시소 짝꿍 (2) | 2025.01.31 |
---|---|
[프로그래머스] Level 2. 메뉴 리뉴얼 (0) | 2025.01.26 |
[프로그래머스] Level 2. 숫자 변환하기 (0) | 2025.01.25 |
[프로그래머스] Level 2. 전화번호 목록 (0) | 2025.01.23 |
[프로그래머스] Level 2. 무인도 여행 (0) | 2025.01.22 |