일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- D3
- SW Expert Academy
- LeetCode
- 데이터베이스
- algorithm
- cs
- data structure
- Database
- c++
- db
- 프로그래머스
- network
- D2
- 네트워크
- swea
- 독서
- Programmers
- OS
- 알고리즘
- 백준
- BOJ
- algogritim
- Computer Science
- 감상문
- 재테크/투자
- 문제풀이
- 자료구조
- 운영체제
- language
- 법의학
Archives
- Today
- Total
선택은 나의 것
[BOJ 백준] 1874번 스택 수열 본문
문제
BOJ 1874 : https://www.acmicpc.net/problem/1874
1874번: 스택 수열
1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.
www.acmicpc.net
접근
스택(LIFO : 후입선출)으로 문제에서 주어지는 수열을 만들 수 있는지 확인하는 문제이다. 후입선출 구조란 말 그대로 늦게 들어온 자료가 가장 먼저 나가는 구조를 뜻한다. 양동이 모양을 생각하면 편할 것이다. 이러한 후입선출 구조를 생각해서 코드를 짜면 쉽게 해결할 수 있는 문제이다.
코드
#include <iostream>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, a, chk = 1;
vector<int> v;
vector<char> ans;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a;
if (v.size() == 0 || v[v.size() - 1] != a) {
if (chk > a) {
cout << "NO";
return 0;
}
while (chk != a) {
v.push_back(chk);
ans.push_back('+');
chk++;
}
ans.push_back('+');
ans.push_back('-');
chk++;
} else if (v[v.size() - 1] == a) {
v.pop_back();
ans.push_back('-');
}
}
for(int i = 0; i < ans.size(); i++)
cout << ans[i] << "\n";
return 0;
}
'☽ Algorithm > BOJ' 카테고리의 다른 글
[BOJ 백준] 17780번 새로운 게임 (0) | 2021.12.08 |
---|---|
[BOJ 백준] 15591번 MooTube (Silver) (0) | 2021.12.07 |
[BOJ 백준] 3865번 학회원 (0) | 2021.11.26 |
[BOJ 백준] 13417번 카드 문자열 (0) | 2021.11.25 |
[BOJ 백준] 17089번 세 친구 (0) | 2021.11.24 |
Comments