Stack (14) 썸네일형 리스트형 (C++) - 백준(BOJ) 3425번 : 고스택 https://www.acmicpc.net/problem/3425 3425번: 고스택 각각의 입력값에 대해서, 해당하는 프로그램을 수행한 뒤, 출력값을 출력하면 된다. 출력값이란 스택에 저장되어 있는 숫자이다. 만약, 프로그램 에러가 발생하거나, 모든 수행이 종료됐을 때 www.acmicpc.net 구현 문제였습니다. 풀이방법 * overflow를 고려해야합니다. 계산 결과가 int범위를 초과할 수 있습니다. * divide by zero를 조심하세요. 나눗셈 연산에서 제수가 0인 경우 error입니다. * 문제를 명확히 읽어야 합니다. * 매 명령어 수행시 LIMIT(10억)을 초과할 수 있습니다. * 수행결과에는 stack에 원소가 1개만 있어야합니다. 한 입력마다 입력받은 프로그램을 실행할 때 er.. (C++) - 백준(BOJ) 17413번 : 단어 뒤집기 2 www.acmicpc.net/problem/17413 17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net stack이용한 구현문제였습니다. 풀이방법 3가지 경우에 단어가 stack에서 빠져나옵니다. 1. 현재 보는 문자가 ''인 경우 3. '공백' 또는 마지막 문자인 경우 1.의 경우 stack에 들어있는 문자들이 tag인 경우는 없으므로 (''가 번갈아 나오기 때문) 모두 뽑아 ans에 붙여줍니다. 2. ''포함 모두 뽑아내고 다시 뒤집어주어 원래 단어가 나오게 한 다음 ans변수.. (C++) - 백준(BOJ) 17298번 : 오큰수 답 www.acmicpc.net/problem/17298 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net stack으로 푼 문제였습니다. 풀이방법 1. 인덱스를 넣어줄 스택을 만들어줍니다. 입력을 받은 뒤, 스택이 비어있지 않다면 현재 값보다 작은 동안 해당 인덱스의 값을 갱신해주고 스택 pop해줍니다. 2. 그렇게 모두 수행한다면 찌꺼기가 남는데 오른쪽에 더이상큰 값이 없는 경우에 해당합니다. 그런 값들의 index를 저장하고 있는 stack에 대해 stack이 빌 때까지 top에 해당하는 인덱스의 값들을 -1하고 pop해줍니.. (C++) - 프로그래머스(월간 코드 챌린지 시즌2) : 괄호 회전하기 programmers.co.kr/learn/courses/30/lessons/76502 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr 간단한 스택, 구현 문제였습니다. 풀이방법 1. 왼쪽으로 회전시킨다는 의미는 가장 끝에있는 문자열을 처음으로 위치시키고 0번쨰 ~ size-1까지를 그 다음에 위치시키는 것입니다. 회전한 문자열을 반환하는 함수를 만들어줍니다. 2. 올바른 문자열인지 check해주는 함수를 만들어 줍니다. 여는 괄호라면 stack에 해당 문자열을 push해줍니다. 닫는 괄호라면 다음을 수행합니다. 먼저 여는 괄호가 없는데 닫는 괄호가 나왔다면 0을 반환합니다. stack이 비어있을 때 stack.top()을 해서 접근하면 segmentation fault이므로 !empt.. (C++) - 백준(BOJ) 1918번 : 후위 표기식 www.acmicpc.net/problem/1918 1918번: 후위 표기식 첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 A~Z의 문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 수식 www.acmicpc.net stack으로 해결한 문제였습니다. 풀이방법 1. 정답을 출력할 string 변수 ans, 연산자를 넣어줄 stack op 변수를 선언합니다. 2. 입력받은 string 변수 str의 size만큼 loop를 돌며 다음을 수행합니다. 2-1. str[i] == '('면 무조건 op에 push 2-2. str[i] == ')'면 '('를 포함한 한블럭의 op를 pop() 2-3. str[i] == '*' .. (C++) - 프로그래머스(연습문제) : 올바른 괄호 programmers.co.kr/learn/courses/30/lessons/12909 코딩테스트 연습 - 올바른 괄호 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 programmers.co.kr stack을 이용한 문제였습니다. 풀이방법 올바른 괄호가 나오면 '('와 ')' 가 만나 터져 없어지는 생각을 했습니다. 1. '('문자를 stack에 push합니다. 2. stack에 원소가 있고 stack.top()이 '('인데 s[i]가 ')'라면 올바른 괄호이므로 stack을 pop()해줍니다. 3. stack에 원소가 남아.. (C++) - 백준(BOJ) 17178번 : 줄서기 www.acmicpc.net/problem/17178 17178번: 줄서기 아이즈원의 팬인 시온이는 드디어 티켓팅에 성공하여 콘서트를 갔다. 콘서트장에 일찍 도착한 시온이는 기대하며 입장을 위해 줄을 섰다. 하지만 아이즈원의 인기대로 시온이를 포함한 많은 www.acmicpc.net stack으로 구현한 문제였습니다. 풀이방법 1. 입장 순서 정렬 먼저 입장해야하는 순서를 티켓정보를 정렬함으로써 알아낼 수 있습니다. 정렬시 주의해야할 점은 티켓의 정보 중 앞 알파벳이 같은 티켓이라면 -다음 숫자가 적은 것이 앞으로 와야합니다. 함수로 정렬 기준을 마련하지 않고 그냥 sort하게 된다면 A-102가 A-4보다 뒤로가게 됩니다. string으로는 A-102가 A-4보다 큰 값이기 때문입니다. 따라서 subs.. (C++) - 프로그래머스(고득점 kit - 스택/큐) : 주식가격 답 programmers.co.kr/learn/courses/30/lessons/42586 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 programmers.co.kr stack을 이용한 문제였습니다. 풀이방법 두 인덱스 사이의 차이는 초로 환산될 수 있습니다. 예를 들어 0번 인덱스의 price와 1번 인덱스의 price는 1초의 차이가 있습니다. 이를 이용해 stack에 price의 인덱스를 넣는 방식을 사용했습니다. 1. price[stack.top()] > price[i] 인동안 즉 가격이 떨어졌다면 answer[stack.t.. 이전 1 2 다음