상세 컨텐츠

본문 제목

백준 2493 탑 python

Algorithm/algorithm feedback

by 개복신 개발자 2021. 9. 6. 16:11

본문

728x90
반응형

https://www.acmicpc.net/problem/2493

 

2493번: 탑

첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1

www.acmicpc.net


풀이

n=int(input())
height=list(map(int,input().split()))
tower_count=len(height)
stack=[]
res=[]

for i in range(tower_count):
    
    while stack:
        if stack[-1][1]>height[i]:
            res.append(stack[-1][0]+1)
            break
        else:
            stack.pop()
    if not stack:
        res.append(0)

    stack.append([i,height[i]])
    

print(" ".join(map(str,res)))

-stack에 집어 넣는 자료 형태

stack.append([i,height[i]])

height 리스트의 몇 번째 수인지와 그 수의 값을 모두 넣으므로 res에 위치 값을 넣기에 수월하다.

또한 

if stack[-1][1]>height[i]:
    res.append(stack[-1][0]+1)
    break

이 코드처럼 코드로 표현하기도 수월하다

 

-스택에 쓸모있는 자료만 넣기/ 불필요한 값은 pop

while stack:
    if stack[-1][1]>height[i]:
        res.append(stack[-1][0]+1)
        break
    else:

        stack.pop()

while문을 잘 사용하는 것은 중요하다. 위 경우에서는 스택에 있는 탑과 height의 i번째 탑과

높이를 비교해서 만약 후자보다 높이가 높다면 그 순간을 결과값에 넣고 break한다.

하지만 만약 존재하지 않는다면 i번째 탑이 stack의 탑들보다 더 높다는 의미이므로

스택의 탑들은 존재가치가 없다. 따라서 else문에서 pop을 시킨다.

또한 발사한 레이저가 아무 탑에도 부딪히지 않으므로 결과값에

0을 집어넣어야 한다

if not stack:
    res.append(0)

 

그 후 순차적으로 또 값을 집어넣는다.-->stack.append([i,height[i]])

 

 

반응형

'Algorithm > algorithm feedback' 카테고리의 다른 글

정렬 문제  (0) 2021.10.28
백준 9935 문자열폭발 python  (0) 2021.09.02
Boj 1991 트리 순회 python  (0) 2021.07.29
Boj 15828 Router python  (0) 2021.07.23
Boj 큐2 python  (0) 2021.07.23

관련글 더보기

댓글 영역