Stack
-
괄호 회전하기프로그래머스(Programmers) 2022. 5. 18. 23:50
제한사항 s의 길이는 1 이상 1,000 이하입니다. 입출력 예 sresult "[](){}" 3 "}]()[{" 2 "[)(]" 0 "}}}" 0 입출력 예 설명 입출력 예 #1 다음 표는 "[](){}" 를 회전시킨 모습을 나타낸 것입니다. xs를 왼쪽으로 x칸만큼 회전올바른 괄호 문자열? 0 "[](){}" O 1 "](){}[" X 2 "(){}[]" O 3 "){}[](" X 4 "{}[]()" O 5 "}[](){" X 올바른 괄호 문자열이 되는 x가 3개이므로, 3을 return 해야 합니다. 입출력 예 #2 다음 표는 "}]()[{" 를 회전시킨 모습을 나타낸 것입니다. xs를 왼쪽으로 x칸만큼 회전올바른 괄호 문자열? 0 "}]()[{" X 1 "]()[{}" X 2 "()[{}]" O ..
-
괄호변환 C++프로그래머스(Programmers) 2022. 1. 11. 23:00
"균형 잡힌 괄호 문자열" p가 매개변수로 주어질 때, 주어진 알고리즘을 수행해 "올바른 괄호 문자열"로 변환한 결과를 return 하도록 solution 함수를 완성해 주세요. 매개변수 설명 p는 '(' 와 ')' 로만 이루어진 문자열이며 길이는 2 이상 1,000 이하인 짝수입니다. 문자열 p를 이루는 '('와 ')'의 개수는 항상 같습니다. 만약 p가 이미 "올바른 괄호 문자열"이라면 그대로 return 하면 됩니다. 입출력 예 p result "(()())()" "(()())()" ")(" "()" "()))((()" "()(())()" 입출력 예에 대한 설명 입출력 예 #1 이미 "올바른 괄호 문자열" 입니다. 입출력 예 #2 두 문자열 u, v로 분리합니다. u = ")(" v = "" u가 ..
-
짝지어 제거하기 C++프로그래머스(Programmers) 2021. 12. 31. 00:31
입출력 예 s result baabaa 1 cdcd 0 입출력 예 설명 입출력 예 #1 위의 예시와 같습니다. 입출력 예 #2 문자열이 남아있지만 짝지어 제거할 수 있는 문자열이 더 이상 존재하지 않기 때문에 0을 반환합니다. #include #include #include using namespace std; int solution(string s) { int answer = 0; stack st; for(int i=0; i 효율성과 정확성을 위해 stack을 사용하면 간단한 문제였습니다. *저는 pair를 사용하면서 비교를 하다 보니 효율성에서도 정확성에서도 틀리고 말았습니다. (그래도 replace 함수 공부는 하게 되었습니다.) => 질문글들을 보면 stack에 쌓으며 가장 위에 있는 값과 현재 ..
-
주식가격프로그래머스(Programmers) 2021. 12. 3. 01:17
#include #include #include using namespace std; vector solution(vector prices) { int size=prices.size(); stack can; //stack에는 해당prices의 값이 들어가는 시간이 쌓인다. vector arr(size); //몇초 지났는지 넣을 vector for(int i=0; i prices[i]) // stack이 비어있지 않고 && 스택 맨위의 인덱스에 해당하는 prices의 가격 이 곧 들어올 prices보다 큰 경우 = 가격이 하락한 경우 { arr[can.top()] = i-can.top(); can.pop(); } can.push(i);// 하락한 경우가 아닐 경우, stack에 prices의 INDEX값 ..
-
프린터프로그래머스(Programmers) 2021. 11. 28. 21:04
#include #include #include #include #include #include using namespace std; int solution(vector priorities, int location) { int answer = 1; queue arr; //first : priority, second : index priority_queue priQue; for(int i=0; i queue와 priority queue를 사용하는 문제입니다. => priority를 사용하지 않을 경우 매번 지금 queue에 남아 있는 원소들 중 priority가 가장 높은 아이가 누구인지를 for문을 통해 찾아야 합니다. => 저는 이런방식을 사용하려 했지만, 오류가 나였으며 우선순위 큐를 사용할 경우 삽..
-
프로그래머스 - 탑 C++프로그래머스(Programmers) 2020. 7. 11. 14:21
문제 설명 수평 직선에 탑 N대를 세웠습니다. 모든 탑의 꼭대기에는 신호를 송/수신하는 장치를 설치했습니다. 발사한 신호는 신호를 보낸 탑보다 높은 탑에서만 수신합니다. 또한, 한 번 수신된 신호는 다른 탑으로 송신되지 않습니다. 예를 들어 높이가 6, 9, 5, 7, 4인 다섯 탑이 왼쪽으로 동시에 레이저 신호를 발사합니다. 그러면, 탑은 다음과 같이 신호를 주고받습니다. 높이가 4인 다섯 번째 탑에서 발사한 신호는 높이가 7인 네 번째 탑이 수신하고, 높이가 7인 네 번째 탑의 신호는 높이가 9인 두 번째 탑이, 높이가 5인 세 번째 탑의 신호도 높이가 9인 두 번째 탑이 수신합니다. 높이가 9인 두 번째 탑과 높이가 6인 첫 번째 탑이 보낸 레이저 신호는 어떤 탑에서도 수신할 수 없습니다. 맨 왼쪽..
-
프로그래머스 - 다리를 지나는 트럭 C++프로그래머스(Programmers) 2020. 7. 11. 11:34
문제 설명 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다. ※ 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다. 예를 들어, 길이가 2이고 10kg 무게를 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6] kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다. 따라서, 모든 트럭이 다리를 지나려면 최소 8초가 걸립니다. solution 함수의 매개변수로 다리 길이 bridge_length, 다리가 견딜 수 있는 무게 weight, 트..
-
백준 1260 -DFS와 BFS백준 algorithm 2020. 7. 3. 13:14
=> DFS와 BFS를 사용할 줄 아는지 묻는 문제였습니다. => 기본적으로 입력을 받을때 인접 행렬, 인접 리스트, 간선 리스트를 만들어두면 편합니다. => DFS와 BFS code 역시 형식이 정해져있으므로, 이해와 함께 암기해두시면 편리합니다. => DFS와 BFS에 대한 설명은 생략하겠습니다. => DFS : 깊이를 끝까지 따라가며 탐색하는 방법 ( stack을 사용하지만, 코드에서는 재귀를 통해 구현 가능) => BFS : 너비를 우선시하면 탐색하는 방법 ( queue를 사용하여 코드로 구현 가능) void dfs(int x, int n) //x는 탐색 시작점, n은 정점의 갯수 { check[x]=true; cout