algorithm/baekjoon
[백준] 10799 쇠막대기(파이썬)
support_u
2023. 3. 7. 09:03
문제
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
코드
replace
import sys
input = sys.stdin.readline
stick = input().strip()
stick=stick.replace("()", "0")
open = 0
st_c = 0
for i in stick:
if i == "0":
st_c += open
elif i == "(":
open += 1
elif i == ")":
open -= 1
st_c += 1
print(st_c)
stack
import sys
input = sys.stdin.readline
stick = list(input().strip())
cut = 0
total = []
st_c = 0
for i in range(len(stick)):
if stick[i] == "(":
total.append(stick[i])
else:
if stick[i-1] == "(":
total.pop()
if total:
st_c += len(total)
else:
total.pop()
st_c += 1
해설
일단 주위점은 끝날때 막대를 어디서 세는지이다. 풀이처럼 지울때가 아닌 st_c에 집어 넣을 때 세버리면 예시 1번에서 18이 나오게 된다.
두 풀이 방법은 비슷한데, 차이가 있다면 replace로 ()를 없애고 갔는지, ()를 직접 세었는지이다.
커팅 전에 가로를 세어주고 커팅 할때마다 st_c에 추가해주는 풀이를 했다.
이 방법이 생각이 안나서 오랫동안 고민했다. 생각해보면 간단한데 돌아가고 있었던 것 같다 다음에 다시 풀어봐야겠다.