티스토리 뷰

문제


직선 상에 일렬로 탑이 나열되어 있습니다. 

이 탑에는 서로 신호를 송/수신할 수 있는 장치가 달려있습니다.

신호는 한 방향으로만 흐르며, 신호를 송신한 탑보다 높은 탑에서만 수신합니다.

또한, 한 번 수신된 신호는 다른 탑으로 송신되지 않습니다.

 

맨 왼쪽부터 순서대로 탑의 높이를 담은 배열 heights가 매개변수로 주어질 때 각 탑이 쏜 신호를 어느 탑에서 받았는지 기록한 배열을 return 하도록 solution 함수를 작성해주세요.

 

제한 사항

  • heights는 길이 2 이상 100 이하인 정수 배열입니다.
  • 모든 탑의 높이는 1 이상 100 이하입니다.
  • 신호를 수신하는 탑이 없으면 0으로 표시합니다. 

 

입출력 예제

heights return
[6,9,5,7,4] [0,0,2,2,4]
[3,9,9,3,5,7,2] [0,0,0,3,3,3,6]
[1,5,3,6,7,6,5] [0,0,2,0,0,5,6]

신호는 오른쪽에서 왼쪽으로 송신한다. 

 

 

풀이


def solution(heights):
    answer = [0] * len(heights)
    
    while heights:
        probe = heights.pop()
        for idx in range(len(heights)-1,-1,-1):
            if heights[idx] > probe:
                answer[len(heights)] = idx +1
                break
    return answer

 

NOTE

처음에는 answer에 append를 하려했으나,

굳이 append를 하지 않고 탑의 수 (입력값 리스트 길이) 만큼 answer를 0으로 설정해두면

따로 0 값을 append 한다는 조건문을 적지 않아도 되어 편한 코딩이 가능했다.


또한 pop을 이용하면서 입력받은 list의 값을 거꾸로 인덱싱을 하면 reverse를 이용하지 않아도 되며

번잡스러운 인덱싱 ( 순차적으로 역순으로) 을 하지 않아도 되었다.


그리 어려운 문제는 아니였지만, 생각하는데 시간이 조금 걸렸다 .. ㅠㅠ

 

@ 문제 출처 : https://programmers.co.kr/learn/courses/30/parts/12081

댓글
링크
최근에 올라온 글
Total
Today
Yesterday