본문 바로가기

알고리즘/Stack

(8)
백준 10828 스택 - Swift https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 문제 정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 다섯 가지이다. push X: 정수 X를 스택에 넣는 연산이다. pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. size: 스택에 들어있는 정수의 개수를 출력한다. empty: 스택이 비어있..
백준 1874 스택 수열 - Swift 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 문제 스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다. 1부터 n까지의 수..
백준 11899 괄호 끼워넣기 https://www.acmicpc.net/problem/11899 11899번: 괄호 끼워넣기 첫 번째 줄에 S를 올바른 괄호열으로 만들기 위해 앞과 뒤에 붙여야 할 괄호의 최소 개수를 출력합니다. 불가능한 경우는 주어지지 않습니다. www.acmicpc.net 스택 = 괄호, 짝맞추기 코드 func sol() { var bracket = readLine()! var stack = [Character]() for i in bracket { if !stack.isEmpty && stack.last! == "(" && i == ")" { stack.removeLast() continue } stack.append(i) } print(stack.count) } sol()
백준 17413 단어 뒤집기 2 조건에 따라서 분기문이 많아져서 짜면서도 하.. 이게 맞나 싶었는데 일단 맞추고 맞춘사람들 보니까 다들 비슷했습니다. 애초에 문제 자체가 많은 조건에 따라서 분기가 달라지기 때문에 이렇게 될 수 밖에.. 🤣 코드 let input = Array(readLine()!) var sentence = "" var isTagZone = false var answer = "" func sol() { for i in 0..
백준 3986 좋은 단어 문제 : https://www.acmicpc.net/problem/3986 3986번: 좋은 단어 이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에 www.acmicpc.net 괄호, 짝 맞추기 이런 문제면 큐, 스택 먼저 의심 해보자~~ 근데 문제가 넘 웃김.. 1시간 남았는데 누가 좋은 단어를 세고 있어 해탈한 건가 🤣 코드 func sol() -> Int { let n = Int(readLine()!)! var answer = 0 for i in 0..
백준 9012 괄호 풀이방법 스택에 "("을 쌓아놓고 닫힌 괄호면 하나씩 빼주었다. 코드 var repeatNum = Int(readLine()!)! func sol() { A: for i in 0..
백준 12605 단어순서 뒤집기 깨달은 점 print 하는데에 꽤 오래 걸린다고 생각해서 String 변수를 하나 만들어서 여기에 var string += Case #1: test \n 이런식으로 하고 마지막에 print(string) 한번에 해봤다. 그런데 print를 여러번 하는 것보다 4ms 오래걸렸다. 무조건 입출력 하는 것 보다는 빠를 줄 알았는데 의외였다. 풀이 let repeatNum = Int(readLine()!)! func sol() { for i in 1...repeatNum { let input = readLine()! let splitedInput = input.split(separator: " ") print("Case #\(i):", splitedInput.reversed().joined(separator:..
백준 10799 쇠막대기 이게 도대체 무슨 문제일까 처음 접근 방식을 떠올리기가 힘든 문제 였습니다. 근데 스택문제라는 걸 알고 다시보니까 앞에서 부터 한개씩 숫자 이것저것 맞춰보니까 아..? 어? 오.. 하고 깨달았습니다. ㅋㅋ 풀이법은 다음과 같습니다. "(" 이면 스택에 넣는다. ")" 이면 그 앞 인덱스의 괄호를 확인한다. 그 앞 괄호가 "(" 이라 레이저를 뜻하는 괄호면 그 동안 스택에 쌓아 놨던 "("의 갯수를 더해준다. 그 앞 괄호가 ")" 이라 쇠막대기의 끝을 뜻하는 괄호면 스택에 쌓아놨던 "("를 하나 없애고 두개로 쪼개지는 것이므로 +1 더해줌 풀이방법 func sol() { let input = Array(readLine()!) var answer = 0 var lineNum = 0 for i in 0..