[참고 문제 : https://www.acmicpc.net/problem/1874]
Target으로 들어오는 값이 현재 보고있는 오름차수 숫자 값과 같거나 더 크면 계속해서 스택에 쌓인다.
더 이상 스택에 쌓일 수 없을 때도 Target이 스택의 Top과 다르면, 뽑을 수 없는 수가 되고,
항상 마지막에는 Pop을 통해 최상위 값을 빼낸다. (Target이거나, 스택에 들어있을 것이므로)
N = int(input())
stk = list()
result = list()
cnt = 1
resultCnt = 0
while resultCnt < 2 * N:
target = int(input())
while cnt <= target:
stk.append(cnt)
cnt += 1
result.append('+')
resultCnt += 1
if stk[-1] != target:
print("NO")
exit()
stk.pop(-1)
result.append('-')
resultCnt += 1
for i in result:
print(i)
#include <cstdio>
#include <stack>
using namespace std;
int main(){
int N;
stack<int> stk;
scanf("%d", &N);
char* arr = new char[2*N];
int cnt = 1, target, resultCnt = 0;
while(resultCnt < 2*N){
scanf("%d", &target);
while(cnt <= target){
stk.push(cnt++);
arr[resultCnt++] = '+';
}
if(stk.top() != target){
printf("NO");
return 0;
}
stk.pop();
arr[resultCnt++] = '-';
}
for(int i = 0; i < resultCnt; i++){
printf("%c\n", arr[i]);
}
return 0;
}
'Algorithm' 카테고리의 다른 글
[java] Rotate Array (0) | 2022.06.24 |
---|---|
[java] Median of Two Sorted Arrays (0) | 2022.06.23 |
[java] Longest Substring Without Repeating Characters (0) | 2022.06.23 |
[java] jump game 2 (0) | 2022.06.22 |
[Python] 소수 찾기 (0) | 2019.05.23 |