반응형
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
◎ 문제풀이
문제에 제시된 단어 하나하나를 모두 자료구조로 만들 필요는 없다. (완벽주의 조심!) 문제의 목적에 달성하기 위한 수단만 필요할 뿐이다. 즉, 레이저, 막대가 나왔다고 레이저, 막대를 자료구조로 만들 필요가 없다는 의미이다.
레이저가 막대기를 자르면 막대의 개수는 레이저 개수 + 1개 이다.
"()"가 레이저이므로 레이저가 나올때까지 막대를 기억해야 한다고 생각해서 STACK을 떠올렸다.
")"는 두가지 경우가 있다.
1. 레이저인 경우
레이저가 등장하면 STACK에 저장된 막대기는 모두 잘린다.
총 잘려진 막대개수 += STACK에 저장된 막대개수
2. 막대인 경우
총 잘려진 막대개수 += 1
막대기는 레이저개수 +1개로 잘린다. 지금까지 레이저가 나올때 마다 잘려진 막대개수에 추가되었으니 마지막으로 +1을 해주어야 한다.
◎ 코드
import sys
input = sys.stdin.readline
items = list(input().rstrip())
stack = []
stack.append(items[0])
block_count = 0
for i in range(1,len(items)) :
if items[i] == "(" :
stack.append(items[i])
elif items[i] == ")" :
if items[i-1] == "(" :
stack.pop()
block_count += len(stack)
else :
stack.pop()
block_count += 1
print(block_count)
반응형
'문제풀이' 카테고리의 다른 글
| [CodingTest] BOJ17298 오큰수 ( 자료구조 ) With 파이썬 (0) | 2023.06.13 |
|---|---|
| [CodingTest] BOJ1697 숨바꼭질 ( BFS ) With 파이썬 (0) | 2023.06.12 |
| [CodingTest] BOJ17413 단어뒤집기2 ( 문자열 ) with Python (0) | 2023.06.09 |
| [PS] BOJ11659 구간합구하기4 ( prefix-sum ) with Python,JAVA (0) | 2023.06.08 |
| [PS] BOJ2609 최대공약수와 최소공배수 ( math ) with Python (0) | 2023.06.08 |