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 |
29 | 30 | 31 |
Tags
- C++
- IFileDialog
- C
- Unreal Engine5
- directx
- DeferredRendering
- NRVO
- 티스토리챌린지
- winapi
- DirectX11
- 1563
- UnrealEngine4
- softeer
- 2294
- 언리얼엔진5
- 백준
- const
- UE5
- 팰린드롬 만들기
- GeeksForGeeks
- UnrealEngine5
- 줄 세우기
- Frustum
- RootMotion
- Programmers
- algorithm
- RVO
- 프로그래머스
- baekjoon
- 오블완
Archives
- Today
- Total
Game Develop
[Algorithm] Programmers :: 뒤에 있는 큰 수 찾기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/154539
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
|
vector<int> solution(vector<int> numbers)
{
vector<int> answer(numbers.size());
stack<int> s;
for (int i = numbers.size() - 1; i >= 0; --i)
{
while (1)
{
if (s.empty())
{
answer[i] = -1;
break;
}
if (s.top() > numbers[i])
{
answer[i] = s.top();
break;
}
s.pop();
}
s.push(numbers[i]);
}
return answer;
}
|
cs |
이런 문제도 몇개 풀면서 느낀건데... 대충 문제설명 읽으면 뒤에서부터 값을 저장하면서 0으로 다가가야한다는걸 바로 알기는 한다.. 다만 이번문제같은 경우는 결국 다른사람 풀이를 참고했다.
시간효율을 너무 좋게하는 방법을 우선으로 생각하다보니 오히려 문제를 못풀어버리는 것 같다.
로직은 매우 간단하다. numbers의 끝에서부터 0번째 인덱스까지 접근할건데, 매 시도마다 스택에 numbers[i]값을 계속 넣어주는걸 전제로 한다.
그리고 스택의 값들을 검사할건데, 자기보다 큰값이 나올때까지 그냥 pop을 해버린다.
매번 계속 스택에 넣긴 하기때문에, 스택의 top에는 가장 가까운 인덱스의 값이 들어있기 때문에 가능하니 로직이다.
원하는 값(자신보다 큰 값)을 찾으면 answer[i]에 기록하고 반복문을 탈출한다음, stack에 자기값(numbers[i])를 넣고 다음 인덱스로 넘어가면 된다.
'Algorithm > Programmers' 카테고리의 다른 글
[Algorithm] Programmers :: 미로 탈출 (0) | 2023.06.15 |
---|---|
[Algorithm] Programmers :: 호텔 대실 (0) | 2023.06.14 |
[Algorithm] Programmers :: 숫자 변환하기 (0) | 2023.06.13 |
[Algorithm] Programmers :: 시소 짝꿍 (0) | 2023.06.13 |
[Algorithm] Programmers :: 택배 배달과 수거하기 (0) | 2023.06.13 |