Algorithm
백준 4949번: 균형잡힌 세상 - Swift 풀이
서서리
2024. 3. 25. 02:47
SMALL
오늘의 문제
4949번: 균형잡힌 세상
각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에
www.acmicpc.net
이 문제... https://tobeforest.tistory.com/13 이거랑 문제 내용만 다르지 로직은 똑같다.
날먹 하려고 일부러 한 건 아닌데, 요새 내가 푸는 챕터가 자료구조라서 그렇다. 자료구조 챕터 다 풀면 다음 챕터로 넘어갈 예정. (자료구조가 챕터 1이다.)
그래도 저거 푼 지 며칠 지났는데 친구랑 고민했던 게 인상 깊어서 그런가 로직이 바로 생각나서 바로 풀었다.
내 풀이
import Foundation
var stack: [Character] = []
// 온점 나올 때까지 계속 인풋 받기
while true {
let input = readLine()!
if input == "." {
break
}
// 문자열 하나씩 돌면서 확인
for target in input {
// 괄호일 때만
if target == "(" || target == ")" || target == "[" || target == "]" {
// stack의 top과 지금 타겟 캐릭터가 쌍이면
if (stack.last == "(" && target == ")") || (stack.last == "[" && target == "]") {
// top을 pop
stack.removeLast()
} else {
// 쌍이 아니면 지금 타겟 캐릭터를 스택에 추가 (push)
stack.append(target)
}
}
}
// 문자열 다 돌고 나서 스택에 남는 괄호가 있으면 쌍이 맞지 않는 게 있다는 뜻 -> no 출력
// 스택이 비었으면 모든 괄호가 쌍이 있다는 뜻 -> yes 출력
print(stack.isEmpty ? "yes" : "no")
// 스택 초기화
stack.removeAll()
}
스택 자료구조 사용해서 풀면 되고 쉬우니까 설명은 주석으로 대체.
LIST