본문 바로가기

스택2

[Algorithm/BOJ] 1406 - 에디터 Swift Python 문제 풀이: 이 문제의 핵심은 2개의 스택을 사용하는 것이다. L: 왼쪽 스택에서 pop하고 그 값을 오른쪽 스택에 추가한다. D: 오른쪽 스택에서 pop하고 그 값을 왼쪽 스택에 추가한다. B: 왼쪽 스택에서 pop한다. P: 왼쪽 스택에 값을 추가한다. 오른쪽 스택은 문자열이 거꾸로 추가되었으므로 마지막에 오른쪽 스택을 reversed해줘야 한다. 처음에 배열로 접근해서 풀었을 때 스위프트는 시간초과가 나고 파이썬은 같은 풀이로 푼 문제가 맞았다. 원인은 스위프트에서 readLine()!.split(separator: " ").map { Int(String($0))! } 를 통해 Int형 배열로 입력을 받는 과정에서 시간이 더 소모된 것이 영향이 있는 것 같다. 그래서 스위프트는 배열로 입력을 받지 .. 2021. 5. 11.
[Algorithm/BOJ] 2504 - 괄호의 값 Swift 문제풀이: 열린 괄호일 때, 문제의 핵심은 1로 초기화된 temp 변수를 이용하여 "("가 입력되면 2를 곱하고 "["가 입력되면 3을 곱하는 것이다. 또한, 스택에 현재 괄호를 추가해준다. 닫힌 괄호일 때, 스택이 비어있거나 스택의 가장 윗 부분이 해당 닫힌 괄호에 짝이 아니라면 bool 값을 토글하고 반복문을 빠져나옵니다. -> 올바르지 않은 경우 확인 현재 괄호 직전의 괄호( "(" )가 해당 닫힌 괄호( ")" )의 짝일 경우에만 현재 temp의 값을 결과 값에 더해준다. 아래의 그림처럼 그려보면 이해가 된다. temp를 해당 괄호에 따라 2를 나누거나 3을 나눠준다. 스택에 짝이 맞는 괄호를 꺼낸다. 이와 같이, 반복문이 다 돌고 bool값이 초기화한 값과 다르거나 스택이 비어있지 않다면 0을 .. 2021. 5. 1.