Python/[코드트리]

[코드트리] Min/Max > 가장 왼쪽에 있는 최댓값(★)

hyunnn_00 2023. 7. 2. 16:34
N개의 숫자가 주어졌을 때, 주어진 숫자들 중 최댓값의 위치를 출력합니다. 만약 최댓값이 여러 개라면, 가장 왼쪽에 있는 최댓값의 위치를 출력합니다.
그 이후에는 위에서 구한 최댓값의 위치보다 더 왼쪽에 있는 숫자들 중 최댓값을 구해 그 위치를 출력합니다. 이 경우에도 최댓값이 여러 개라면, 가장 왼쪽에 있는 최댓값의 위치를 출력합니다.
위의 과정을 끊임없이 반복하며, 최종적으로 첫 번째 원소가 뽑히게 되면 이 과정을 종료합니다. 이러한 과정을 거쳐 구해진 최댓값의 위치들을 출력하는 프로그램을 작성해보세요.

 

 

 

# 변수 선언 및 입력
n = int(input())
a = list(map(int, input().split()))

prev_max_idx = n

# 첫 번째 원소가 최대가 되기 전까지 계속 반복합니다.
while True:
    # 최대값 후보의 시작은 항상 첫 번째 원소입니다.
    max_idx = 0

    # 두 번째 원소부터 바로 직전 최대로 뽑힌
    # 원소 전까지 보면서 그 중 최대 index를 갱신합니다.
    # index를 오름차순으로 보기 때문에
    # 최댓값이 여러개인 경우 가장 왼쪽에 있는
    # 원소가 뽑히게 됩니다.
    for i in range(1, prev_max_idx):
        if a[i] > a[max_idx]:
            max_idx = i

    print(max_idx + 1, end=" ")

    # 최대인 원소가 첫 번째 원소라면 종료합니다.
    if max_idx == 0:
        break

    #바로 직전 최대 index를 갱신해줍니다.
    prev_max_idx = max_idx
    
# 나의 풀이 -------------------------------------
n = int(input())
arr = list(map(int, input().split()))

max_val = max(arr)  # 최댓값
max_idx = arr.index(max_val)  # 최댓값의 첫 번째 위치
print(max_idx + 1, end=' ')

while max_idx > 0:
    arr = arr[:max_idx]  # 최댓값 이전의 숫자들만 남김
    max_val = max(arr)  # 최댓값 업데이트
    max_idx = arr.index(max_val)  # 최댓값의 첫 번째 위치
    print(max_idx + 1, end=' ')