본문 바로가기

알고리즘 문제

프로그래머스 탑

배열의 오른쪽에서부터 시작.

기준점은 x로 잡고 y로 하나씩 왼쪽 이동한다. 왼쪽에 있는 것이 기준점보다 크다면 신호를 받을 수 있으므로 신호를 보낸 x 인덱스로

answer[x] = y+1을 해준다. 여기서 y는 신호를 받은 탑의 인덱스인데 첫 탑의 인덱스는 0이지만 문제 상의 위치는 1로 표시해야하므로 y를 넣어주는 게 아니라 y+1를 해야한다.

신호를 받은 위치를 찾아서 answer 배열에 넣었으면 break를 해서 신호를 보내는 다음 탑을 기준점으로 하고 반복한다.

def solution(heights):
start=len(heights)-1
answer = [0]*len(heights)
for x in range(start,0,-1):
#print('x',x)
for y in range(x-1,-1,-1):
#print('y', y)
if heights[x]<heights[y]:
answer[x]=y+1
break
return answer

print(solution([6,9,5,7,4]))
print(solution([3,9,9,3,5,7,2]))
print(solution([1,5,3,6,7,6,5]))
print(solution([9,8,7,6,5]))


https://programmers.co.kr/learn/courses/30/lessons/42588?language=python3