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=' ')