연습장/백준(BOJ) 문제풀이

[백준 10799] 쇠막대기 with Python

Tesseractjh 2021. 5. 7. 19:18

문제 링크

www.acmicpc.net/problem/10799

 

10799번: 쇠막대기

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

www.acmicpc.net

풀이

parenthesis = input().replace("()", "L")
laser = []
count = 0
for i in parenthesis:
    if i == "(":
        laser.append(0)
    elif i == ")":
        cur_count = laser.pop()
        count += cur_count + 1
        if laser: laser[-1] += cur_count
    else:
        if laser: laser[-1] += 1
print(count)

문자열을 입력받고 레이저 부분만 다른 문자열로 바꾼다.

 

문자열을 순회하면서 아래의 과정을 반복한다.

1. "("가 나오면 laser에 원소를 추가한다.

2. "L"이 나오면 laser의 마지막 원소를 1 증가시킨다. (레이저로 잘린 횟수)

3.

- ")"가 나오면 laser의 마지막 원소를 삭제하고, count를 (마지막 원소 + 1) 만큼 증가시킨다. (잘린 횟수 + 1개 만큼의 쇠막대기가 나오기 때문)

- laser의 마지막 원소에 삭제한 원소의 값을 더한다. (아직도 삭제되지 않은 원소들은 삭제된 원소가 잘린 횟수만큼을 같이 잘렸기 때문)