출처: https://school.programmers.co.kr/learn/courses/30/lessons/120899?language=python3
문제 설명
정수 배열 array가 매개변수로 주어질 때, 가장 큰 수와 그 수의 인덱스를 담은 배열을 return 하도록 solution 함수를 완성해보세요.
제한사항
1 ≤ array의 길이 ≤ 100
0 ≤ array 원소 ≤ 1,000
array에 중복된 숫자는 없습니다.
입출력 예
array result
[1, 8, 3][8, 1]
[9, 10, 11, 8][11, 2]
입출력 예 설명
입출력 예 #1
1, 8, 3 중 가장 큰 수는 8이고 인덱스 1에 있습니다.
입출력 예 #2
9, 10, 11, 8 중 가장 큰 수는 11이고 인덱스 2에 있습니다.
내가 작성한 코드문
def solution(array):
answer = [0,0]
answer[0] = max(array)
answer[1] = array.index(answer[0])
return answer
간단하게 max 함수로 최댓값을 구하고 최댓값의 인덱스 또한 index함수로 구함.
다른 사람의 풀이
def solution(array):
return [max(array), array.index(max(array))]
def solution(array):
val = max(array)
return [val, array.index(val)]
더 간결한 풀이다.
def solution(array):
return sorted([[a, i] for i, a in enumerate(array)])[::-1][0]
enumerate(array): 배열의 각 요소에 대해 인덱스와 값을 쌍으로 반환하는 이터레이터를 생성
예를 들어, array = [10, 5, 20]이면 (0, 10), (1, 5), (2, 20)이 나온다.
sorted(...): 위에서 만든 리스트를 정렬
Python은 리스트 안에 리스트가 있을 때, 기본적으로 첫 번째 요소를 기준으로 정렬하고, 첫 번째 요소가 같으면 두 번째 요소를 기준으로 정렬한다.
여기서 리스트의 형태가 [값, 인덱스]이므로, 리스트는 값을 기준으로 오름차순(작은 값 큰 값) 정렬된다.
예: [[10, 0], [5, 1], [20, 2]] [[5, 1], [10, 0], [20, 2]]
def solution(array):
answer = [0, 0]
num = array[0]
for i in range(len(array)):
if num < array[i]:
num = array[i]
answer[0] = num
answer[1] = i
return answer
자바 처럼 알고리즘을 활용한 풀이다.
반복문과 최댓값 변수를 활용한 풀이