티스토리 뷰
문제
직선 상에 일렬로 탑이 나열되어 있습니다.
이 탑에는 서로 신호를 송/수신할 수 있는 장치가 달려있습니다.
신호는 한 방향으로만 흐르며, 신호를 송신한 탑보다 높은 탑에서만 수신합니다.
또한, 한 번 수신된 신호는 다른 탑으로 송신되지 않습니다.
맨 왼쪽부터 순서대로 탑의 높이를 담은 배열 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
'프로그래밍 > 프로그래머스' 카테고리의 다른 글
프로그래머스: #해시, 위장 (0) | 2020.01.07 |
---|---|
프로그래머스: #해시, 전화번호 목록 (0) | 2020.01.06 |
프로그래머스: # 해시, 완주하지 못한 선수 (0) | 2020.01.06 |
댓글