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
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하는게 내가 생각한 이상적인 정답 코드지만 디테일이 부족했던것같다
