# 문제
# 문제 접근
신호가 오른쪽에서 왼쪽으로 간다는 조건만 이해하면 어렵지 않은 문제였다.
자신의 위치를 기준으로 왼쪽방향으로 진행하면서 자신보다 높은 가장 먼저 만나는 탑을 기록하면 된다.
스택/큐 로 분류되어 있어서 스택으로 풀까 하였지만, 굳이 사용 할 필요가 없었다.
# 문제 풀이
1. 탑 배열의 가장 뒤부터 순회를 시작한다.
2. 현재 탑의 위치를 기준으로 다시 배열을 뒤에서 앞으로 순회한다.
3. 현재 탑보다 높이가 높은 탑을 만나면 기록하고 다음 탑에서 반복한다.
# 코드 작성
def solution(heights):
# 배열의 길이, 계산을 용이하게 하기 위해.
LEN = len(heights)
# 정답 배열, 신호를 받지 못한 탑의 값인 0으로 미리 초기화한다.
answer = [0] * LEN
# 배열의 뒤부터 앞으로 루프를 돌린다.
for i in range(LEN - 1, -1, -1) :
# 현재 배열의 위치(= 현재 탑)을 기준으로 뒤부터 루프를 돌린다.
for j in range(i - 1, -1, -1) :
# 현재의 탑보다 높은 위치의 탑을 발견한 경우
if heights[j] > heights[i] :
# 위치를 기록하고 break를 통해 다음 루프를 돌린다.
answer[i] = j+1
break
# 결과 반환
return answer
* 본 문제의 출처는 프로그래머스(https://programmers.co.kr/) 입니다. 문제가 될 시 삭제하겠습니다.
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 코딩테스트 고득점 Kit > 쇠막대기 (0) | 2020.03.18 |
---|---|
[프로그래머스] 코딩테스트 고득점 Kit > 주식가격 (0) | 2020.03.18 |
[프로그래머스] 코딩테스트 고득점 Kit > H-Index (0) | 2020.03.07 |
[프로그래머스] 코딩테스트 고득점 Kit > 가장 큰 수 (0) | 2020.03.07 |
[프로그래머스] 코딩테스트 고득점 Kit > K번째수 (0) | 2020.03.07 |