ios 26일차

bin·5일 전

회고

오늘은 새로운 과제가 시작되는 날이다.
기간이 일주일이 되지않아서, 빠르게 움직여야하고 필요한 공부도 집중해서 해야한다.

알고리즘 풀이

1. 올바른 괄호

'('와')'가 주어지는데, 괄호가 올바르게 짝지어지었는가를 확인한 후 결과를 출력하는 문제이다.
기존의 방법으로는 각 입력을 배열에 담고 괄호가 짝지어지면 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
}

2. 비밀지도

두 비밀지도를 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
}

0개의 댓글