Today 1/5
while let input = readLine(), input != "." {
let inputArr = input.map{String($0)}
var stack = [Int]()
for char in inputArr {
if char == "(" {
stack.append(1)
} else if char == "[" {
stack.append(2)
} else if char == ")" {
if stack.last == 1 {
stack.removeLast()
} else {
stack.append(3)
break
}
} else if char == "]" {
if stack.last == 2 {
stack.removeLast()
} else {
stack.append(3)
break
}
}
}
print(stack.isEmpty ? "yes" : "no")
}
스택을 사용하면 쉽게 풀 수 있는 문제이다.
for _ in 0..<Int(readLine()!)! {
let inputArr = readLine()!.map{String($0)}
var stack = [Int]()
for input in inputArr {
if input == "(" {
stack.append(1)
} else {
if stack.isEmpty {
stack.append(2)
break
} else {
stack.removeLast()
}
}
}
print(stack.isEmpty ? "YES" : "NO")
}
앞의 문제와 거의 똑같은 문제이지만. 더 빨리 풀어보고 싶어서 서칭을 좀 했는데, 아예 stack을 안쓰고 Int값으로 풀 수도 있을 것 같았다.
for _ in 0..<Int(readLine()!)! {
let inputArr = readLine()!.map{String($0)}
var bracketCount = 0
for input in inputArr {
if input == "(" {
bracketCount += 1
} else {
if bracketCount == 0 {
bracketCount = -1
break
} else {
bracketCount -= 1
}
}
}
print(bracketCount == 0 ? "YES" : "NO")
}
var stack = [Int]()
for _ in 0..<Int(readLine()!)! {
let input = Int(readLine()!)!
if input == 0 {
stack.removeLast()
} else {
stack.append(input)
}
}
print(stack.reduce(0,+))
let num = Int(readLine()!)!
var peopleArr = [(Int, Int)]()
for _ in 0..<num {
let input = readLine()!.split(separator: " ").map{Int(String($0))!}
peopleArr.append((input[0], input[1]))
}
for index in 0..<num {
var greater = 1
for others in 0..<num {
if peopleArr[index].0 < peopleArr[others].0 && peopleArr[index].1 < peopleArr[others].1 {
greater += 1
}
}
print(greater)
}
가장 큰 수를 max로 잡아서 보다 아래 있는 것들을 세야 하나 하고 한참 고민을 했는데, 그냥 순서 상관없이 하나씩 기준으로 삼으면서 기준보다 큰 것들을 골라내면 자연스럽게 해결되는 문제였다. 고정관념때문에 괜히 고민했다..