일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자료구조
- 너비우선탐색
- c++
- bfs
- 구현
- 코딩
- OS
- vector
- 북리뷰
- 코테
- 컴퓨터공학과
- 문제풀이
- 컴공
- 오에스
- 알고리즘
- coding
- Operating System
- 오퍼레이팅시스템
- cs
- DP
- 그래프
- 스택
- 정석학술정보관
- 정석
- 개발
- Computer science
- 백준
- 브루트포스
- 컴공과
- Stack
- Today
- Total
목록스택 (12)
Little Jay
처음 파트는 Linked List로 구현했다 남들은 array로 구현하는게 쉽다고 하는데 본인은 Linked List로 구현하는게 훨씬 쉽다고 느껴졌다 #include #include using namespace std; class Node { public: int data; Node* next; Node(int e) { this->data = e; this->next = NULL; } }; class LinkedList { public: Node* head; Node* tail; LinkedList() { head = NULL; tail = NULL; } ~LinkedList() { } int front() { return head->data; } void addFront(int e) { Node* n..
이 문제를 해결하는데는 두 달정도가 걸린 것 같다. 방학때 자료구조 배우고 개강하기 전에 stack 고급 문제들을 풀어봐야지 하고 무심코 도전했던 첫 골드 문제였는데 5번 제출하고도 틀렸었고, 백준에 질문을 올려서 뭘 잘못했는지 반례를 찾았고, 드디어 해결을 했다. stack과 문자열 parsing을 활용한 문제였다. html의 tag를 생각하면 되는 문제였는데, 다행히도 html의 태그 내의 css요소 들은 신경을 안써도 되었다. 그래서 a 태그, br 태그 들을 잘 생각해주면 되는 문제였다. 내가 틀린 부분은 처음에 가 들어올 경우 legal로 출력이 되는 것이 문제였다. 이 부분을 처리해주고 제출했더니 correct가 떴다. 재미있기도 했고, 허무했던 stack 문제였다. #include #incl..
처음에는 이중 for문 즉, O(N^2)로 풀었는데 시간초과가 떠버렸다. 어떻게 이걸 O(N)으로 풀지, 그리고 어떻게 스택으로 풀지 고민하다가 결국 다른 분의 블로그를 참조했다. 원리는 생각보다 간단했다. stack에 저장하면서 stack에 있는 값이랑 비교하면서 큰 값 나올때까지 pop하기 답을 안보고 싶은데 진짜 1시간 동안 못풀면 계속 보게된다;;;; #include #include #include using namespace std; int N; stack s; int ans[1000001]; int seq[1000001]; int main() { cin >> N; for (int i = 0; i > seq[i]; for (int i = N - 1; i >= 0; i-..
백준 풀다가 너무 현타와서 조금 쉬운 문제들을 풀어보는 중 stack을 활용한 괄호 확인 문제이다. #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); string s; while (getline(cin, s)) { stack braces; bool flag = true; if (s == "#") { break; } for (int i = 0; i < s.size(); i++) { if (s[i] == '(') { braces.push('('); } else if (s[i] == '[') { braces.push('['); } else if (s[i] == '{') { br..
스택을 활용하는 전형적인 문제 처음에 커서라는 단어를 봤을 때 이걸 환영 링크드 리스트로 구현을 해야되나라고 생각을 했었는데 생각을 해보니까 커서를 기준으로 왼쪽, 오른쪽으로 스택을 나누어 풀면 쉽겠다라고 생각했다. #include #include #include using namespace std; int main() { string s; cin >> s; int n; cin >> n; string temp; stack left; stack right; for (int i = 0; i > temp; if (temp == "L") { if (left.empty()) con..
'{'가 들어오면 push하고 '}'가 들어올 때는 먼저 stack이 비었는지 확인하고 비어있으면 '{'로 바꿔주고 바꾼 횟수를 늘려준다 만약 empty가 아니라면 pop해주면 된다 스택이 비었으면 return change 스택이 차 있으면 return change + st.size() / 2 #include #include using namespace std; int main() { string s; int test = 1; while (true) { cin >> s; int change = 0; if (s[0] == '-') break; stack st; for (int i = 0; i < s.length(); i++) { if (s[i] == '{') st.push(s[i]); else { if (..
cin의 버퍼 문제때문에 조금 푸는데 애가 먹었다 https://m.blog.naver.com/cksdn788/221239805238 [Grind Away] C++ getline 사용시 buffer clear 문제 깔끔하게 해결하기 C++에서 getline 함수를 사용할 시 입력 버퍼상의 '\n'문자까지 읽어들인다. 하지만 일반적인 cin >>... blog.naver.com 이 분의 블로그를 참조해서 buffer을 clear하는 방법을 배웠다. cin을 하면 개행문자까지 읽기 때문에 getline을 할때 첫 번째 for문에서 '\n'을 받아버리는 경우가 발생해버렸다. 이를 cin.ignore()을 사용하면 간단하게 해결이 가능하다는 사실을 배웠다. 생각보다 까다로운 Bronze 1 문제였던 것 같다. ..
괄호의 쌍을 검사하는 것이다 앞에서 비슷한 문제가 있긴 했었는데, 이번 문제는 소괄호와 대괄호 두 개의 서로 다른 괄호들을 사용했다. 각각의 괄호의 쌍이 맞는지 스택을 사용해서 검사하는 문제. #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); string s; while (getline(cin, s)) { if (s[0] == '.' && s.length() == 1) break; stack braces; bool flag = true; for (int i = 0; i < s.size(); i++) { if (s[i] == '(') { braces.push('('); } ..
이 문제는 문제 자체를 이해하는데 많이 시간이 소요되었다 결론부터 말하자면 pop()으로 나오는 숫자들이 처음의 배열과 똑같이 되는 경우를 찾고, 아닌경우는 NO를 출력하면 되는 것이다 문제를 조금 친절히 설명해주면 좋겠지만 문제를 분석하는 것도 결국 능력이기에...... #include #include #include using namespace std; int main() { stack st; int n, x; cin >> n; vector v; int max = 0; while (n--) { cin >> x; if (x > max) { for (int i = max + 1; i
이렇게 푸는 것이 맞는지는 모르겠지만 풀이를 설명하자면 먼저 ( 가 들어올 때 스택에다가 push를 해준다 만약 ( 가 들어오고 다음게 ) 면 레이저를 쏴주야 하기 때문에 스택의 사이즈만큼 계속 더해준다 만약 그것도 아니고 ) 만 들어온다면 마지막에는 하나씩 남는 막대가 생기기 때문에 하나씩 total 개수에 더해준다 #include #include #include using namespace std; int main() { string s; cin >> s; stack st; int total_bar = 0; for (int i = 0; i < s.size(); i++) { if (s[i] == '(' && s[i + 1] == ')') { total_bar += st.size(); i++; conti..