728x90
반응형

스택 13

백준, BOJ, 1741번, 단어 뒤집기2 C++ [CPP] ★★★

이 문제는 스택에 관한 예외처리를 하는데 도움이 된다. 순서를 잘 생각해야 하는 문제다. 대충 답을 끼워맞춘 느낌이고 코드가 정제되지 않았지만 이런 식으로 푸는 듯 하다. https://www.acmicpc.net/problem/17413 #맞은 풀이 #include using namespace std; stack stk; string s; int main(){ //띄어쓰기 포함 모든 문자열을 받아야함 getline(cin, s); bool isTagging = false; //Tagging 중일 때, 아닐 때 //공백을 만났을 때, 아닐 때 for(char c : s){ if(c == ''){ cout

알고리즘 문제풀이 - 스택, Stack 총정리

사실 스택을 이용하는 문제는 수없이 많다. 글 하나로 정리를 할 수 없다는 것은 안다. 하지만 스택이 가리키는 것은 단 하나 밖에 없고 그 개념을 조금이라도 감을 잡고자 글을 쓴다. 실전 개념 1. 스택은 한쪽 끝에서만 자료를 넣고 뺄 수 있다. 2. Push, Pop은 O(1)의 시간복잡도를 가진다. 3. Stack에 최근에 들어간 것만 뺄 수 있다. => 가장 마지막에 들어간 것만 뺄 수 있다. 확장 3. 연속된 원소를 집어넣으면 뺄 때는 역순으로 나온다. 문제를 풀면서 저 1,2,3번의 개념이 어디에 들어가나 보자 1. 단어 뒤집기 사실 어려운 문제다. https://www.acmicpc.net/problem/9093 #include using namespace std; int n; int main..

프로그래머스 카카오, 괄호 변환 C++ [CPP] ★★★

문자열 처리에 애를 먹었다. 조건이 정말 까다로웠다. 난 그랬다. https://programmers.co.kr/learn/courses/30/lessons/60058 #맞는 풀이 #include using namespace std; //나눌 수 없는 균형잡힌 문자열 => position //그것이 올바른지 아닌지 return bool IsCorrect(string str, int* pos){ bool isCorrect = true; int open = 0; int close = 0; stack stk; for(int i = 0; i 해당 위치를 찾았으니 종료 if(open == close){ *pos = i + 1; return isCorrect; } } return true; } string solu..

프로그래머스, 짝지어 제거하기: C++ [CPP] ★★★★

스택을 아는데도 문제를 보면 막상 생각이 안난다. 스택의 문제를 생각해보면 스택은 바로 이전의 것과 비교하는 것이 많이 나온다. 이 문제도 마찬가지였다. https://programmers.co.kr/learn/courses/30/lessons/12973 #맞은 풀이 #include #include #include using namespace std; int solution(string s) { int answer = -1; //문자의 개수가 홀수라면 모두 없앨 수 없음 if(s.size()%2 == 1) return 0; stack stk; for(char x : s){ if(stk.empty()){ stk.push(x); }else{ if(stk.top() == x) stk.pop(); else st..

백준, BOJ, 2841번, 외계인의 기타 연주 : C++ [CPP]

그냥 문제 이해가 조금 어려웠다. https://www.acmicpc.net/problem/2841 #맞는 풀이 #include #include #include using namespace std; int N, P; stack vec[7]; int main(){ cin >> N >> P; int cnt = 0; for(int i = 0; i> x >> y; //먼저 누르려는 것보다 아래를 연주하려는지 확인 while(!vec[x].empty()){ //가장 위 플랫을 제거 if(vec[x].top()>y){ cnt++; vec[x].pop(); }else break; } //손을 다 뗀 후에 //이미 누른 상태면 그냥 패스 if(!vec[x].empty()){ if(vec[x].top() == y)con..

백준, BOJ, 17298번 C++ [CPP]

DFS, BFS 알고리즘을 알아야 풀 수 있는 문제다. https://www.acmicpc.net/problem/17298 이것은 그냥 뭐 생각대로 하기 쉽지 않다. 해보려 했는데..인덱스가 저장이 안되어서 정말 힘들었다.그래서 pair를 쓸까 하다가.그냥 스택 2개를 썼다. 인덱스를 이용해야 한다라는 생각을 하면 어렵지만 생각할 수 있는 문제라고 한다.한 번에 생각하기는 확실히 힘든 것 같다. 다른 사람과 풀이를 비교하지 않는 이유는원리는 같아서 그렇다. #include #include #include #include using namespace std; stack num; // 숫자를 넣음 stack stk; // 인덱스를 넣음 int N; int arr[1000001]; void init(){ io..

스택과 힙 메모리 영역, Stack Heap Memory

운영체제를 배웠다면.. 조금이라도 알 수 있지만 시험이 끝나면 까먹는 우리에게 다시 익힐 시간이 필요하다. 다시 알아보자 ** 데이터 영역에는 전역 변수, static variable들이 저장된다. 숫자나 문자열 값인 리터럴도 저장된다. **리터럴이란 소스 코드의 고정된 값을 말한다. 즉, int i = 1; 에서 1을 말한다. -생존 주기, Life Cycle은 프로그램의 시작부터 끝까지 가지고 있다. text영역은 code segment라고도 불리는데 프로그램 코드가 저장되고 절대 변경되지 않는 구역이다. 우선 스택과 힙이 하는 역할에 대해서 알아보자. 스택에는 함수호출, Function Call에서 메모리 할당이 일어난다. 함수 호출에 쓰이는 지역변수, 매개변수가 저장되고 함수호출에 대한 활성 레코..

CS Interview 2021.08.25

백준, BOJ, 2504번, 괄호의 값 C++ [CPP]

어렵지 않지만 생각을 잘해야 하는 문제 220227에 다시 풀어보니 생각이 안나는 어려운 문제.. 거의 일년만에 다시 푸네.. ㅋㅋㅋㅋㅋ 값이 확정되는 때가 언제더라 생각하고 있었다. www.acmicpc.net/problem/2504 2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 www.acmicpc.net 괄호가 나왔으니 스택에 쌓아가면서 할 것이란 것은 예상을 했다. 하지만 또 문제였던 것이 괄호를 닫을 때 이것이 멀리 있는 괄호가 닫히는 것인지 가까이 있는 괄호가 닫히는 것인지 구분을 하지 못한다는 큰 맹점이 생긴다. EX) ..

백준, BOJ 10799번, 쇠막대기 C++ [CPP]

2022.02.25 다시 풀어보았다. 21년 4월에 풀고 거의 1년만이다. 문제다. www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 물론 살펴보면서 규칙을 찾는 것은 많이 어렵지는 않았다. 스택에 쌓아가면서 생기는 쇠막대기의 개수를 테스트 케이스와 비교해보면서 규칙을 찾았다. 여기서 중요한 것은 스택만 이용하면 안된다. 스택만 이용하면 ()를 처리하는지 멀리떨어져있다가 삭제되어서 ()가 되어서 삭제되는지 알 수 없다. 때문에 나는 다른 방법을 이용했다. 문자열 자체를 ..

백준,BOJ 2493번, 탑 C++ [CPP]

22.03.01 다시 풀어봄 모든 문제를 기록하긴 좀 그렇고 내가 이해가 한 번에 안된 것들을 다시 이해시키고자 한다. www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 문제를 보자. 탑을 하나씩 세운다고 생각하자. 탑을 세울 때, 내 왼쪽에 수신할 탑이 없으면 0 수신할 탑이 있으면 해당 수신 탑의 index를 출력하면 되겠다. 5개의 탑 높이를 입력받는다. 6 9 5 7 4 순서대로 탑을 세우자. 위의 방법으로 해결하기 위해서는 왼쪽에 있는 탑들에 대한 ..

728x90
반응형