백준_2493 (탑_스택_스택의 시간복잡도2_나중에 다시풀기)

RostoryT·2022년 6월 22일
0

Stack Queue

목록 보기
10/17

1차 코드 - 시간초과 O(N^2)

  • 풀스캔이라 그런가?
import sys
leng = int(sys.stdin.readline())
arr = list(map(int,sys.stdin.readline().split()))

ans = []

# 역순으로 가야한다
for i in range(leng-1, 0, -1):     # 1까지
    for j in range(i-1, -1, -1):   # 0까지
        if arr[i] < arr[j]:
            ans.append(j+1)
            break
        if i == 1 and arr[i] > arr[j]:  # 끝에서 두 번째 기둥 예외 케이스 처리
            ans.append(0)

ans.append(0)    # 맨 앞의 탑은 그 앞이 없으므로 항상 0이다
ans.reverse()
print(" ".join(map(str,ans)))


2차 코드 - 시간 초과 (마찬가지인듯)

  • 반복문 줄이는게 아니라 결국 연산 횟수를 줄여야 할 것 같은데...
import sys
leng = int(sys.stdin.readline())
arr = list(map(int,sys.stdin.readline().split()))

ans = []

i = leng-1
next_num = i

# 역순으로 가야한다
while 1:     # 인덱스의 끝값부터 1까지(인덱스 0 미포함)
    next_num -= 1
    if next_num < 0:
        break
        
    if arr[next_num] > arr[i]:
        ans.append(next_num+1)  # 정답은 0부터가 아니라 1부터
        i -= 1
        next_num = i
        
    if i == 1 and arr[next_num] < arr[i]:  # 끝에서 두 번째 기둥 예외 케이스 처리
        ans.append(0)

ans.append(0)    # 맨 앞의 탑은 그 앞이 없으므로 항상 0이다
print(" ".join(map(str,ans[::-1])))


profile
Do My Best

0개의 댓글