N = int(input())
inputList = list(map(int, input().split()))
maxInt = 0
maxList = []
for i in range(len(inputList)):
if i == 0:
maxInt = inputList[i]
continue
if i == len(inputList):
maxList.append(-1)
break
if inputList[i] > maxInt:
maxInt = inputList[i]
maxList.append(maxInt)
else:
maxList.append(0)
maxList.append(-1)
# print(maxList)
notZeroNum = 0
for i in range(len(maxList)-1, 0, -1):
# print("maxList[",i,"] = ", maxList[i])
if maxList[i] != 0:
notZeroNum = maxList[i]
else:
maxList[i] = notZeroNum
# print(maxList)
for i in range(len(maxList)):
print(maxList[i], end=' ')
제일 첫 입력이 가장 큰 수로 들어올 때 예외 처리를 하지 못함
자기 보다 큰 수 중에서 가장 왼쪽인 걸 보면 되니까 입력을 받을 때 마다 이전까지 기록하고 있던 최대값이랑 비교해서 내가 더 큰가? 를 체크하고 내가 더 크다면 내가 큰 수들 중에서 가장 왼쪽에 있는 수라고 할 수 있다.
1시간 머리 굴리다가 구글링
스택을 이용하는 문제였고 배열의 값이 아닌 배열의 인덱스를 저장해두고 이를 이용하는 문제였다.
i가 주어진 배열(A)의 길이만큼 차근 차근 증가한다.
이 때 마다 스택의 TOP의 원소(인덱스)의 값과 비교한다.
<스택의 TOP 원소 - 인덱스>의 값보다 현재 i 인덱스에 해당하는 값이 더 크다면?
-> 자기보다 큰 애들 중에서 가장 왼쪽이라는 말
=> 오큰수이므로 answer에 해당 인덱스 맞춰서 값 넣어준다.
stack이 있고, 현재 i 인덱스에 해당 하는 값이 <스택의 TOP 원소 - 인덱스>의 값보다 클 때만 위의 과정을 반복한다.
예를 들면 위의 그림에서
i가 3이고 A[3] > A[stack[-1]] 일 때 7이 2보다 크므로 stack에서 2를 pop 해오고 (이게 바로 index) A[index]의 값을 갱신 해주는 것이다(이게 오큰수)
from collections import deque
N = int(input())
A = list(map(int, input().split()))
answer = [-1] * N
stack = deque()
for i in range(N):
while stack and A[i] > A[stack[-1]]:
index = stack.pop()
answer[index] = A[i]
stack.append(i)
print(*answer)
어제 정현이 형, 병우 형, 현우랑 간단하게 맥주를 마셨다. 셋 다 알고리즘으로는 어느정도 이름을 날리는 중 이기에 좋은 말도 많이 해줬다. 덤으로 너무 두들겨 맞아서 어질어질했다.
지금 내가 하고 있는 알고리즘 공부 즉, 생각의 흐름, 풀이 과정, 왜 이렇게 풀었나, 왜 못풀었나 하는 과정들을 정리하는 것은 이미 1,2학년에 했어야 하는 과정이기에 지금 이렇게 하기엔 시간이 너무 부족하다는 얘기가 핵심이었다.
대회를 나갈게 아니고 알고리즘은 단지 취준의 목적이며 실무에서 거의 쓰이지 않는다. 취뽀를 위해서 정말 많은 걸 준비해야 하고 알고리즘은 그 중에 딱 하나임을 명심하란다.
앞으로는 이런 과정을 조금 줄이고 보다 효율적으로 공부를 해야겠다.
나보다 잘하는 사람이 정말 많다. 제도관에서 아무나 붙잡아도 나보다는 잘할 거 같다. 하지만 스트레스 받을 필요가 전혀 없다. 내가 그동안 안했고 걔네는 했으니 걔네가 더 잘하는 건 너무 당연하다.
알고리즘 공부를 시작한지 얼마 되지도 않았고 나는 여전히 좁밥이고 아직 갈 길이 멀다. 꾸준히 하면 내 실력은 언젠간 어떤 방식으로든 증명될 것이다.
병우행님 말씀 중에 딱 하나 머리에서 떠나가질 않는 게 있는데,
정말 많은 사람들의 코드를 봐야한다. 그 수많은 코드 중에서 딱 하나, 내가 마음에 드는, 나랑 잘 맞다고 느껴지는, 이건 딱 내꺼다 라는 코드가 있다. 그걸 찾아라. 그 코드는 내가 코드를 짜는 스타일과 습관 등이 가장 비슷한 코드일 것이고 그걸로 공부를 하면 된다.
그래서 구글에 코드를 뒤지다가 꿀팁 하나 찾았다.
진짜 개꿀
그리고 또 하나