커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
2493 문제 시간복잡도
[스킬업] 실무에 바로 쓰이는 알고리즘 by Python
기타
북마크
현*람
댓글
1
추천
0
조회수
4
조회수
4
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


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

위 문제 풀었는데, 단조증가 스택 사용해서 풀었습니다.


그런데 이게 스택 내용물을 pop 할때 반드시 하나만 pop 하는게 아닌데

(이미 9,7,6,5 가 쌓여있는데 다음 차례가 8일 경우)

왜 시간복잡도가 O(N)이라 하는건지 잘 감이 안옵니다.


import sys
input = sys.stdin.readline
N = int(input())
cnt = 0
B = []
arr = ['0'] * N
for b in list(map(int,input().split())):
    B.append((b, cnt))
    cnt += 1
stk = []
ln = 0
for b in B:
    while stk:
        # 자기보다 작으면 pop (단조증가수열 유지용)
        if(stk[-1][0] <= b[0]):
            stk.pop(-1)
        else:
            arr[b[1]] = str(stk[-1][1] + 1)
            # 자기보다 크거나 작은걸 만나면 이후 아무것도 안하면 됨 + 루프방지
            break
    # 일단 자기 자신은 스택의 맨 위에 놓는다
    stk.append(b)
print(' '.join(arr))









취소
 공유
취소
댓글 0
댓글 알림
나의얼굴