diff --git a/src/week2/BOJ17298/BOJ17298_V1.cpp b/src/week2/BOJ17298/BOJ17298_V1.cpp new file mode 100644 index 0000000..e07ab0b --- /dev/null +++ b/src/week2/BOJ17298/BOJ17298_V1.cpp @@ -0,0 +1,54 @@ +#include +using namespace std; + +int main() { + + int N; + cin >> N; + + vector arr(N); + vector> ret(N); + + for (int i = 0; i < N; i++) { + cin >> arr[i]; + } + + ret[N-1] = {arr[N-1],-1}; + for (int i=N-2; i>=0; i--) { + if (arr[i] < arr[i+1]) { + ret[i].first = arr[i+1]; + ret[i].second = i+1; + } else if (ret[i+1].second == -1) { + ret[i].first = arr[i]; + ret[i].second = -1; + } else { + int temp_num = i+1; + while(true) { + if (temp_num == -1) { + ret[i].first = arr[i]; + ret[i].second = temp_num; + break; + } + + if (ret[temp_num].first > arr[i]) { + ret[i].first = ret[temp_num].first; + ret[i].second = ret[temp_num].second; + break; + } else { + temp_num = ret[temp_num].second; + } + } + } + } + + for (int i = 0; i < N; i++) { + if (ret[i].second == -1) { + cout << -1 << " "; + } else { + cout << ret[i].first << " "; + } + } + + + return 0; +} \ No newline at end of file diff --git a/src/week2/BOJ17298/BOJ17298_V2.cpp b/src/week2/BOJ17298/BOJ17298_V2.cpp new file mode 100644 index 0000000..cd9c5d3 --- /dev/null +++ b/src/week2/BOJ17298/BOJ17298_V2.cpp @@ -0,0 +1,30 @@ +#include +using namespace std; +int N; + +int main() { + + cin >> N; + vector arr = vector(N,0); + vector ret = vector(N,-1); + stack stk; + + for (int i = 0; i < N; i++) { + cin >> arr[i]; + while (stk.size() && arr[stk.top()] < arr[i]) { + ret[stk.top()] = arr[i]; + stk.pop(); + } + stk.push(i); + } + + for (int i : ret) { + cout << i << " "; + } + + + + + + return 0; +} \ No newline at end of file