[백준] 최댓값(Python - 2562번)

규갓 God Gyu·2024년 11월 15일

백준

목록 보기
83/96

문제

9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.

예를 들어, 서로 다른 9개의 자연수

3, 29, 38, 12, 57, 74, 40, 85, 61

이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.

입력

첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.

출력

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.

예제 입력 1

3
29
38
12
57
74
40
85
61

예제 출력 1

85
8

첫 문제 풀이(실패)

import sys

data = sys.stdin.read().split()

maxNum = 0

for i in range(len(data)-1):
  if int(data[i]) > int(data[i+1]):
    maxNum=data[i]
print(int(maxNum))
print(data.index(maxNum)+1)

sys로 배열안에 모든 값을 저장 후, 가장 큰 수를 찾기 위해 for문 안 if 조건문을 통해 최대값과 최대값일때의 인덱스를 찾아서 예제자체는 풀었지만
어떤게 문제였냐면
maxNum과 data.index(maxNum)이 문자열이고, 데이터가 제대로 정렬되어 있어서 원하는 값이 나오는건데 아닐경우가 있다고 한다. 즉 마지막에 비교하는 숫자가 85와 61이여서 그렇지 최대값이 다른 인덱스에 위치해있었으면 전혀 다른 결과값이 나온다는 의미

그래서 maxNum을 정수로 저장하고 비교하는게 좋고 maxIndex자체를 추가해줘서 인덱스도 값을 할당해버리는게 더 정확한 코드다.

최종 코드

import sys

data = sys.stdin.read().split()
maxNum = int(data[0])
maxIndex = 0

for i in range(1, len(data)):
  if int(data[i]) > maxNum:
    maxNum = int(data[i])
    maxIndex = i
print(maxNum)
print(maxIndex+1)

애초에 첫번째 data의 값을 maxNum에 넣어버리고 for i in range의 시작 인덱스를 1부터 시작해버린 다음에 더 큰 숫자일 때의 i를 maxIndex에 저장시켜버려서 print하는게 내가 생각한 이상적인 정답 코드지만 디테일이 부족했던것같다nt하는게 내가 생각한 이상적인 정답 코드지만 디테일이 부족했던것같다

profile
웹 개발자 되고 시포용

0개의 댓글