ios 26일차

bin·2026년 2월 3일

회고

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

알고리즘 풀이

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개의 댓글