홍우진의 개발 일기장

[백준] 9506번: 약수들의 합 / 파이썬 본문

알고리즘/백준

[백준] 9506번: 약수들의 합 / 파이썬

홍우진 2024. 12. 19. 23:47
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
반응형
Comments