[Swift] 백준 10799 - 쇠막대기

문제링크

솔직히 말하자면, 못풀었다 🥲
그래서 이 풀이 푸신 분들 블로그 풀이 참고해서 풀었다 (링크 걸어도 될지,, 모르겠어서 안걸었지만,, 구글에 쳐서 나오는 swift풀이 몇 분 안계신데 그 분들꺼 다 봤어요)

그리고 백준 사이트에서 다른 분들 풀이도 본 결과!! 핵심은,, 레이저 () 가 나오는 경우를 한 묶음으로 보고, 이 경우에 막대기 개수만큼 더해준다는 것이였다.

그래서

  • "("인 경우, 막대기 하나가 추가된 것이기 때문에 stack에 +1
  • ")"인 경우
    • 만약 바로 앞의 character가 "("라면 레이저로 간주하여 count에 stack(막대기 개수)만큼 더해주고 더해진 레이저의 반쪽"("을 빼야하기 때문에 stack -1해준다
    • 그렇지 않다면, 막대기의 말단으로 여겨 count +1, stack -1 해준다.

풀이 코드


let line = readLine()!.map{String($0)}
let stack = 0
let count = 0

for i in 0..<line.count {
    if line[i] == "(" {
        stack += 1
    } else {
        stack -= 1
        if line[i-1] == "(" {
            count += stack
        } else {
            count += 1
        }
    }
}

print(count)

좋은 웹페이지 즐겨찾기