홍우진의 개발 일기장
[백준] 9506번: 약수들의 합 / 파이썬 본문
728x90
반응형
문제 링크
https://www.acmicpc.net/problem/1874
풀이 코드
cnt = 1
result = True
stack = []
dap = []
n = int(input())
for i in range(n):
num = int(input())
while cnt <= num: #cnt가 num을 넘기 전까지 계속 stack과 dap에 append한다.
stack.append(cnt)
dap.append('+')
cnt += 1
#num이랑 stack 끝이 동일하다면 stack에서 빼고 dap에 - 추가
if stack[-1] == num:
stack.pop()
dap.append('-')
else: #동일하지 않다면 수열 생성이 불가능하므로 NO 출력
print("NO")
result = False
break
if result != False:
for i in dap:
print(i)
코드 해석
복잡한 난이도였다.
핵심은 cnt다. cnt가 stack을 쌓아주고 만들때마다 +를 답에 집어넣고, cnt + 1 을 해준다.
stack을 쌓다가 만약 stack에 들어간 수가 사용자가 넣은 수(num)랑 똑같다면
stack의 제일 끝 수를 빼고 답에 -를 집어넣는다.
만약 동일하지 않다면 수열 생성이 불가능하다는 뜻이다. 따라서 NO를 출력하고 끝낸다.
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 9506번: 약수들의 합 / 파이썬 (0) | 2024.12.18 |
---|---|
[백준] 2525번: 오븐 시계 / 파이썬 (0) | 2024.12.17 |
[백준] 11718번: 그대로 출력하기 / 파이썬 (1) | 2024.12.17 |
[백준] 11005번: 진법 변환 2 / 파이썬 (0) | 2024.12.14 |
[백준] 1924번: 2007년 / 파이썬 (크리스티안 헤세 공식 풀이) (0) | 2024.12.13 |
Comments