오늘은 새로운 과제가 시작되는 날이다.
기간이 일주일이 되지않아서, 빠르게 움직여야하고 필요한 공부도 집중해서 해야한다.
'('와')'가 주어지는데, 괄호가 올바르게 짝지어지었는가를 확인한 후 결과를 출력하는 문제이다.
기존의 방법으로는 각 입력을 배열에 담고 괄호가 짝지어지면 pop을 하여 배열이 비어있는가를 통해 결과를 출력했었다.
그러나, 튜터님의 배열을 이용하지 않은 다른 접근 방법을 생각해보라.라는 말씀에 입력에따라 +1, -1을 하여 결과값이 0이라면 true, 만약 한번이라도 음수값으로 넘어가거나 결과값이 0이 아니라면 false를 반환하도록 구현했다.
import Foundation
func solution(_ s:String) -> Bool
{
var result = 0
for i in s {
if i == "(" {
result += 1
} else {
result -= 1
}
if result < 0 {
return false
}
}
return result == 0 ? true : false
}
두 비밀지도를 OR연산을 통해, 두개의 비밀지도가 모두 # 표시가 없는 곳을 확인하여 배열로 반환하는 문제이다.
처음 문제를 접근하여 풀었을 때는, bit연산을 통한 접근을 생각하지 못했다.
원리는 간단하다, 두 비밀지도를 리스트로 제공받기에 i마다 두 배열을 or연산을 수행한다. or 연산한 결과값을 1과 and 연산한 결과값이 1이라면 temp에 #를 추가하고, 아니라면 공백을 추가한다. 위 동작을 n만큼 반복한 결과물을 answer에 담아서 출력한다.
func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
var answer: [String] = []
for i in 0..<n {
var bitOr = arr1[i] | arr2[i]
var temp = ""
for j in 0..<n {
if bitOr & 1 == 1 {
temp = "#" + temp
} else {
temp = " " + temp
}
bitOr >>= 1
}
answer.append(temp)
}
return answer
}