4949 균형잡힌 세상, 9012 괄호, 10773 제로, 7568 덩치

Choong Won, Seo·2022년 1월 5일
0

백준

목록 보기
11/28
post-thumbnail

Today 1/5

균형잡힌 세상 (My Code)

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")
}

스택을 사용하면 쉽게 풀 수 있는 문제이다.

괄호 (My Code)

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")
}

제로 (My Code)

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,+))

덩치 (My Code)

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로 잡아서 보다 아래 있는 것들을 세야 하나 하고 한참 고민을 했는데, 그냥 순서 상관없이 하나씩 기준으로 삼으면서 기준보다 큰 것들을 골라내면 자연스럽게 해결되는 문제였다. 고정관념때문에 괜히 고민했다..

profile
UXUI Design Based IOS Developer

0개의 댓글