백준/ Silver 3 문제 , 백준 파이썬 10799 , 쇠막대기 [스택]
Check Point ! ( 해당사항 ✓체크 )
1. 막힘 없이 수월하게 풀린 문제인가?
2. 1시간이내로 풀렸던 문제인가?
3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
4. 시간을 써도 도무지 풀 수 없는 문제인가?
5. 솔루션을 찾아봤는가?
-------------------------------------------------------------------------------------------
난이도 체감
1. 최상
2. 상
3. 중
4. 하
<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함
<덧붙일 말>
한 번에 깔끔하게 풀렸다.
문제 출처
https://www.acmicpc.net/problem/10799
풀이
1. 기본 세팅
쇠막대기 상태를 리스트로 한번에 입력 받고
잘라나갈 막대기들을 확인 하기 위해 store 리스트를 선언한다.
check 변수는 해당 괄호가 막대기인지 레이저인지를 구분하기 위함이다.
잘린 갯수들은 result 변수에 저장한다.
2. 리스트 순차적으로 막대기 잘라나가기
우선 여는 괄호가 나오면 이게 막대기인지 레이저인지 바로 알 수 없기때문에 store에 일단 저장해둔다.
그리고 check=True 로 선언해 여는 괄호가 나왔다고 알려준다.
1. 레이저일 경우
이후 닫는 괄호가 나왔을때 check가 True 이면 이것은 여는 괄호 다음에 바로 나온 닫는 괄호이므로 레이저라고 판단하여
이전에 store 에 담았던 값을 빼버리고
check= False 로 바꿔준다. 이제 이 다음에 바로 나오는 닫는 괄호는 막대기의 괄호이다.
또한 레이저는 현재까지 나온 막대기를 절단하므로 store 에 담겨있는 레이저 수만큼 절단하여 result 에 더해준다.
이때 더해주는 것은 잘린 막대기의 왼쪽 갯수들이고 오른쪽 막대기 수는 더해주지 않는다.
2. 막대기의 끝부분일 경우
만약 닫는 괄호가 막대기의 끝부분일 경우는 store에서 막대기 한개가 이제 빠진것과 같으므로 store에서 한개를 빼주고
앞에서 만약 잘려나간 값의 오른쪽값들은 아직 더해지지 않은 상태이므로 1을 result 에 더해준다.
(막대기들의 끝부분이 나올때마다 잘리고 남은 오른쪽 값을 더해주는 것이다.)
앞에서 혹여나 막대기가 잘리지 않았다고 해도 그 막대기의 갯수는 아직 result에 더해지지 않은 상태이므로 1을 마지막에 더 해줘야하니 같은 역할을 해준다.
최종적으로 result에 담긴 값이 잘린 막대기의 수이다.
정답
LIST=list(input())
store=[]
check=False
result=0
for i in LIST:
if i=='(':
store.append(1)
check=True
elif i==')':
if check==True:
store.pop()
check=False
result+=len(store)
else:
store.pop()
result+=1
print(result)
'알고리즘 공부 > 백준 - 파이썬' 카테고리의 다른 글
백준/ Bronze 1 문제 , 백준 파이썬 2563 , 색종이 (0) | 2022.07.29 |
---|---|
백준/ Bronze 1 문제 , 백준 파이썬 9093, 단어 뒤집기 (0) | 2022.07.29 |
백준/ Bronze 2 문제 , 백준 파이썬 17608 , 막대기 [스택] (0) | 2022.07.28 |
백준/ Gold 4 문제 , 백준 파이썬 1963, 소수 경로 [BFS] (0) | 2022.07.27 |
백준/ Gold 4 문제 , 백준 파이썬 2573, 빙산 [BFS] (0) | 2022.07.26 |