본문 바로가기
프로그래밍/알고리즘 문제

[프로그래머스] 스택/큐 탑 문제 (python)

by 잇서니 2019. 8. 18.
반응형

작성코드 

def solution(heights):
    answer = []
    # (1)
    answer.append(0)

	# (2) 
    for i in range(1,len(heights)):

        flag=False

		# (3)
        for j in range(i-1, -1, -1):
            
            if heights[j] > heights[i]:
                answer.append(j+1) 
                flag=False
                break
            else:
                flag=True

		# (4)
        if flag:
            answer.append(0)

    return answer

 

코드설명

(1) 맨 왼쪽 탑은 어차피 신호를 보낼 탑이 없음

  • 그러니 answer의 값은 무조건 0 입니다.

 

(2) 왼쪽 탑부터 로직 수행

for i in range(1, len(height))

  • 두번째 탑 (인덱스 값 1) 부터 끝 탑까지 로직을 수행합니다.

 

(3) 현재 기준탑과 왼쪽에 있는 탑들이랑 높이 비교

for j in range(i-1, -1, -1)

  • 현재 기준탑에서 왼쪽에 있는 탑들 (인덱스 값 : i-1, i-2, ... 0) 을 비교합니다.

if heights[j] > heights[i]

  • 현재 기준탑보다 더 높은 탑이 있다면 그 탑한테 신호를 보냅니다. answer.append(j+1) 로 신호를 보낸 탑의 위치를 answer 배열에 집어넣습니다.
  • 이미 신호를 보냈기 때문에 굳이 더 비교할 필요가 없으므로 break 명령으로 반복문을 빠져나옵니다.

 

(4) 왼쪽 탑 중에 높은 탑이 없으면 answer값을 0으로 세팅

if flag

  • 신호를 보낼 탑이 없는 경우입니다. 

 

python 개념

range() 함수

  • range(4)
0
1
2
3
  • range(1,4)
1
2
3
  • range(3,-1,-1)
3
2
1
0
반응형

댓글