[Swift]BOJ-10799

BOJ-10799, 쇠막대기

문제 📑

https://www.acmicpc.net/problem/10799

 

10799번: 쇠막대기

여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저

www.acmicpc.net

문제 정리 ▾

BOJ-10799

  • 괄호로 된 문자열을 입력받는다.
  • 연이어 나오는 괄호 한 쌍은"()" 레이저를 의미한다.
  • 괄호가 연이어 나오지 않는 경우 쇠막대기로 간주하고, 쇠막대기 사이에 있는 레이저로 쇠막대기를 절단할 때, 절단된 쇠막대기의 총개수를 출력하면 된다.

 

접근 🚶🏻

나의 생각 ▾

  • 문제를 바로 이해했지만 도저히 어떻게 풀어야 할지 감이 안 잡혔다.
  • "("가 나올 때 그다음에도 "("가 나오는지 ")"가 나오는지 판별해야겠다는 생각은 있었지만, 그 후 어떻게 값을 누적시켜야 할지 몰랐다.
  • 다른 분의 코드를 참고한 뒤, 다시 문제를 풀어보았다.

나의 해결 ▾

func solution() {
    let input = readLine()!.map{String($0)}
    var count: Int = 0
    var result: Int = 0

    for i in 0..<input.count {
        switch input[i] {
        case "(":
            count += 1
            
        default:
            count -= 1
            if input[i-1] == "(" {
                result += count
            } else {
                result += 1
            }
        }
    }
    print(result)
}

solution()
  • 코드에 관한 내용은 밑에서 살펴보자 😀

 

코드 리뷰 ▾

let input = readLine()!.map{String($0)}
var count: Int = 0
var result: Int = 0
  • 입력받을 input 변수 선언
  • 쇠막대기의 개수를 누적시킬 count 변수 선언
  • 총쇠막대기의 개수를 누적시킬 result 변수 선언

for i in 0..<input.count {
    switch input[i] {
    case "(":
        count += 1
        
    default:
        count -= 1
        if input[i-1] == "(" {
            result += count
        } else {
            result += 1
        }
    }
}
  • for문
    • String형 변수 input을 하나하나 접근
  • switch문
    • input[i]가 어떤 문자인지 체크를 한다.
  • Case 1
    • "("이면 count + 1 (쇠막대기 개수)
  • Default
    • ")"이면 레이저일 수 있으니 count - 1 (레이저 고려)
  • If
    • ")" 나오기 전이 "(" 일 경우 레이저이므로, 쇠막대기 절단이라고 판단한다.
    • 레이저인지 아닌지를 판별하는 부분이라고 보면 된다.
  • else
    • ")" 나오기 전 값도 ")" 일 경우이다.
    • 레이저가 아닌 쇠막대기이므로, 쇠막대기의 개수 하나를 증가시킨다.

 

Addtional 📂

  • 여러 개의 쇠막대기를 누적시킬 방안이 도저히 생각이 나질 않았었다.
  • 오늘도 하나 배워갔다 🥲

'Algorithm.zip' 카테고리의 다른 글

[Swift]BOJ-11726  (0) 2022.02.07
[Swift]BOJ-17298  (0) 2022.02.05
[Swift]BOJ-17413  (0) 2022.02.03
[Swift]BOJ-10845  (0) 2022.02.02
[Swift]BOJ-1406  (0) 2022.02.01