백준 온라인 저지 2562번 - 최댓값 문제해설
문제
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.
입력
첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.
출력
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.
예제 입력
3
29
38
12
57
74
40
85
61
예제 출력
85
8
해설
문제를 해설하기 전 아래 코드를 살펴보자. 10개의 숫자가 저장된 리스트에서 최댓값을 구하는 예제 코드이다.
numbers = [15, 20, 4, 77, 53, 23, 29, 31, 100, 63]
maxNumber = 0 # 최댓값을 기록하는 변수
for i in range(10):
if numbers[i] > maxNumber: # 만약 현재 값이 기존 최댓값보다 크다면
maxNumber = numbers[i] # 최댓값을 바꿔준다.
print(maxNumber) # 100 출력
최댓값을 기록하기 위한 임시변수 maxNumber
를 만들고 반복문을 통해 리스트 내의 모든 숫자와 비교하면서 maxNumber
를 갱신한다. 이때 주의해야 할 점은 maxNumber
의 초깃값이 리스트 내의 가장 큰 수보다 작아야 한다는 것이다. 그렇지 않다면 리스트 내 maxNumber
보다 큰 수가 없음므로 엉뚱한 결과가 나올 수 있다.
위 코드와 같이 입력받은 수를 리스트에 저장한다면 첫 번째 출력인 최댓값을 얻을 수 있을 것이다. 그렇다면 최댓값이 몇 번째로 입력되었는지 어떻게 알 수 있을까?
그 비밀은 리스트의 색인(인덱스)에 있다. 입력된 값을 순서대로 리스트에 넣어주었다면 값이 저장된 색인의 번호가 입력된 순서가 된다. 여기서 주의해야 할 점은 코딩에서 색인이 0부터 시작되기 때문에 +1을 해주어야 우리가 인지하는 순서 값과 동일해진다.
최댓값이 바뀔 때 색인을 기록하는 임시변수 maxIndex
를 만든다면 아래와 같이 답안 코드를 작성할 수 있다.
답안 코드
numbers = list()
for i in range(9): # 9개의 수를 입력 받는다.
n = int(input())
numbers.append(n)
maxNumber = 0 # 최댓값을 기록하는 변수
maxIndex = 0 # 최댓값의 색인을 기록하는 변수
for i in range(9):
if numbers[i] > maxNumber: # 기존 최댓값보다 크다면
maxNumber = numbers[i] # 최댓값을 갱신한다.
maxIndex = i # 최댓값의 색인을 갱신한다.
print(maxNumber) # 최댓값을 출력
print(maxIndex + 1) # 최댓값의 위치를 출력
여기서 특이한 점은 maxIndex
가 가진 색인으로 리스트의 최댓값에 접근할 수 있기 때문에 maxNumber
사용하지 않도록 코드를 작성하여 변수를 하나 줄이는 것이 가능하다.
numbers = list()
for i in range(9):
n = int(input())
numbers.append(n)
maxIndex = 0
for i in range(9):
if numbers[i] > numbers[maxIndex]: # 색인을 통한 최대값 구하기
maxIndex = i
print(numbers[maxIndex])
print(maxIndex + 1)