본문 바로가기
Algorithm/Programmers

[프로그래머스] 코딩테스트 고득점 Kit > 탑

by du.it.ddu 2020. 3. 18.
반응형

# 문제

# 문제 접근

신호가 오른쪽에서 왼쪽으로 간다는 조건만 이해하면 어렵지 않은 문제였다.

자신의 위치를 기준으로 왼쪽방향으로 진행하면서 자신보다 높은 가장 먼저 만나는 탑을 기록하면 된다.

스택/큐 로 분류되어 있어서 스택으로 풀까 하였지만, 굳이 사용 할 필요가 없었다.

# 문제 풀이

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/) 입니다. 문제가 될 시 삭제하겠습니다.

반응형