[프로그래머스 C++] 뒤에 있는 큰 수 찾기
[프로그래머스 C++] 뒤에 있는 큰 수 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/154539
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해결전략
stack 스택
처음 시도한 코드- 시간초과
#include <string> #include <vector> using namespace std; vector<int> solution(vector<int> numbers) { vector<int> answer; for(int i=0; i<numbers.size(); i++) { int currAnsSize = answer.size(); for(int j=i+1; j<numbers.size(); j++) { if(numbers[i] < numbers[j]){ answer.emplace_back(numbers[j]); break; } } // 검사하는 수 뒤에 더 큰 수가 없는 경우 위에서 answer에 삽입이 되지 않아 answer 사이즈가 변하지X if(currAnsSize == answer.size()) { answer.emplace_back(-1); // 뒤에 더 큰 수가 없는 경우 -1 삽입 } } return answer; }

정답 코드
#include <stack> #include <vector> using namespace std; vector<int> solution(vector<int> numbers) { vector<int> answer(numbers.size(), -1); // 초기값은 -1로 설정 stack<int> stk; for(int i=0; i<numbers.size(); i++) { // 만약 스택이 비어있지 않고, 현재 인덱스의 값이 스택의 top에 해당하는 인덱스의 값보다 크다면, // 즉, 현재 숫자가 이전 숫자보다 큰 경우에는 while (!stk.empty() && numbers[stk.top()] < numbers[i]) { // answer 벡터에서 해당 위치(즉, 이전 숫자의 위치)에 현재 값을 할당. // 이렇게 하면, 각 요소 뒤에 있는 첫 번째 큰 수가 할당됩니다. answer[stk.top()] = numbers[i]; stk.pop(); // 그 값을 처리했으므로 스택에서 pop하여 제거합니다 } stk.push(i); //현재 인덱스를 스택에 push. 이는 아직 다음에 오는 더 큰 수를 찾지 못했다는 것을 의미. } return answer; } int main() { vector<int> testcase1 = { 2, 3, 3, 5 }; vector<int> testcase2 = { 9, 1, 5, 3, 6, 2 }; solution(testcase2); return 0; }

'⭐ 코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 C++] 땅따먹기 (0) | 2023.10.13 |
---|---|
[프로그래머스 C++] 방문 길이 (0) | 2023.10.12 |
[프로그래머스 C++] 인사고과 (0) | 2023.10.09 |
[프로그래머스 C++] [3차] n진수 게임 (0) | 2023.10.08 |
[프로그래머스 C++] 게임 맵 최단거리 (0) | 2023.10.07 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스 C++] 땅따먹기
[프로그래머스 C++] 땅따먹기
2023.10.13 -
[프로그래머스 C++] 방문 길이
[프로그래머스 C++] 방문 길이
2023.10.12 -
[프로그래머스 C++] 인사고과
[프로그래머스 C++] 인사고과
2023.10.09 -
[프로그래머스 C++] [3차] n진수 게임
[프로그래머스 C++] [3차] n진수 게임
2023.10.08
댓글을 사용할 수 없습니다.