안녕하세요. 지난 포스팅의 BOJ 10818번 : 최소, 최대에서는 파이썬 1차원 배열인 리스트 자료형의 내장함수인 max 함수와 min 함수를 이용해서 문제를 풀어보았습니다. 오늘도 역시 최댓값을 출력하는 문제이지만 다른 점은 항상 9개의 숫자를 받는 다는 점과 최댓값이 몇 번째로 입력받았는지까지 출력해야합니다.
핵심 포인트
- 반복문
제출 코드
max_idx = 0
max_value = 0
for idx in range(9) :
tmp = int(input())
if tmp >= max_value :
max_value = tmp
max_idx = idx + 1
print(max_value)
print(max_idx)
해설
해당 문제는 1차원 배열 파트에 들어가있긴 하지만 리스트 자료형을 사용하지 않고도 풀 수 있습니다. 문제의 입력은 항상 9개의 숫자를 한 줄에 한 개씩 입력받기 때문에 반복문을 통해서 입력을 진행해주어야 합니다. 하지만 입력을 받으면서 이를 리스트 자료형에 넘겨주면 다시 반복문을 사용해서 숫자를 순회함으로써 최대 숫자의 인덱스를 반환해주어야하기 때문에 비효율적입니다. 따라서 저는 리스트 자료형을 사용하지 않겠습니다.
기본적인 풀이 방법은 입력을 받을 때마다 해당 숫자가 기존의 최대 숫자보다 큰지 확인하고 크다면 해당 인덱스 값을 저장해주는 것입니다. 먼저, max_idx와 max_value를 선언합니다. 각 변수는 최댓값이 몇 번째 숫자인지 그리고 최댓값을 의미합니다. 다음으로 항상 9개의 숫자만 들어오기 때문에 for idx in range(9) 를 통해서 9번 반복하게 되죠. 그리고 tmp = int(input())을 통해서 새로운 데이터를 입력받습니다.
여기서 중요한 점은 새로운 숫자가 들어올 때마다 만약 이미 저장해놓았던 최댓값보다 크다면 새로운 숫자를 max_value로 갱신하고 해당 인덱스를 저장합니다. 다만, range 함수는 0부터 iterable 자료형을 만들기 때문에 max_idx에는 1을 더하여 저장해줍니다. 그러면 굳이 리스트를 사용하지 않고 최댓값과 최댓값의 위치를 얻을 수 있죠.
참고자료 및 그림출처
'Programming > Coding Problem' 카테고리의 다른 글
BOJ 3052번 : 나머지 (0) | 2022.06.11 |
---|---|
BOJ 2577번 : 숫자의 개수 (0) | 2022.06.11 |
BOJ 10818번 : 최소, 최대 (0) | 2022.06.09 |
BOJ 1110번 : 더하기 사이클 (0) | 2022.06.08 |
BOJ 10951번 : A + B - 4 (0) | 2022.06.08 |