1차원 배열-4단계_ 최댓값
단계 | 제목 | 설명 | |
---|---|---|---|
4 | 1차원 배열 | 1차원 배열 | |
소단계 | 문제번호 | 제목 | |
4 | 2562 | 최댓값 | |
최댓값이 어디에 있는지 찾는 문제 |
문제
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.
입력
첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.
출력
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.
내 제출
미제출
결과
미제출
수정 제출
numbers = []
for _ in range(9):
i = int(input())
numbers.append(i)
print(max(numbers))
print(numbers.index(max(numbers))+1)
결과
정답
오답 이유
이번문제에서는 매 횟수마다 새로운 입력을 하고 이것을 기반으로 list() 를 만들어서 이 List 에서 최댓값을 찾고 최댓값이 몇번째에 있는지 맞추는 문제이다.
이때 append() 함수를 사용해서, 기존에 리스트에 int 를 추가하는 방식으로 코드를 구성하고, max() 함수를 사용, max 값을 찾고 index 를 사용 max 값의 위치를 파악,
몇번째 냐 가 원하는 요구사항이므로 +1 해준다(파이썬의 배열은 0부터 시작한다.)
사용된 코드 이론
append( ), extend( ), insert( ) 함수 비교
세 개의 함수 모두 요소를 추가할 수 있는 함수이다. 그런데 추가하는 방식에는 차이가 있다. 그 차이를 아래에서 비교 정리해본다.
**- 순서 -
**1. append( )
- extend( )
-
insert( )
- 세 개의 함수 비교 정리
1. append( )
array.append(x) 형태로 사용한다.
append는 덧붙인다는 뜻으로 괄호( ) 안에 값을 입력하면 새로운 요소를 array 맨 끝에 객체로 추가한다. 요소를 추가할 때는 객체로 추가하게 되는데, 입력한 값이 리스트와 같은 반복 가능한 iterable 자료형이더라도 객체로 저장한다. 사용 예시는 아래와 같다.
>>> nums = [1, 2, 3]
>>> nums.append(4)
[1, 2, 3, 4]
>>> nums.append([5, 6])
[1, 2, 3, 4, [5, 6]] # 리스트가 하나의 객체로 추가되었음
append 함수를 사용해서 array의 맨 끝에 요소로 추가되었다. 두 번째 예시의 경우 [5, 6]이라는 리스트를 추가하였는데 각 값이 5, 6의 요소로 추가되는 것이 아니라 [5, 6]이라는 리스트 형태가 그대로 요소로 추가된 것을 볼 수 있다.
2. extend( )
array.extend(iterable) 형태로 사용한다. 입력한 iterable 자료형의 항목 각각을 array의 끝에 하나씩 추가한다. append와 동일하게 요소를 array의 끝에 추가하지만 append와 다른 점은 괄호( ) 안에는 iterable 자료형만 올 수 있다는 것이다. iterable 자료형이 아닌 경우 TypeError가 발생한다. 사용 예시는 아래와 같다.
>>> nums = [1, 2, 3]
>>> nums.extend([4, 5])
[1, 2, 3, 4, 5] #리스트로 주어진 [4, 5]의 요소가 각각 추가 되었음
>>> a = [10]
>>> nums.extend(a)
[1, 2, 3, 4, 5, 10]
괄호 안에 iterable 자료형만 입력할 수 있기 때문에 요소 하나를 추가하려면 리스트와 같은 iterable 자료형으로 변환하여 입력해야 한다. 그런데 요소 하나만 추가한다면 굳이 extend 함수를 사용하기보다는 append 함수를 사용하는 것이 편리하겠다. 반면 append 함수는 iterable 자료형의 요소를 각각 추가하는 것이 불가능하니 그럴 때는 extend 함수를 사용할 수 있겠다.
3. insert( )
array.insert(i, x) 형태로 사용한다. array의 원하는 위치 i 앞에 추가할 값 x를 삽입할 수 있다. i는 위치를 나타내는 인덱스를 숫자를 입력한다. 음수를 입력하면 배열의 끝을 기준으로 처리된다. 추가할 값 x는 객체로 추가되며 iterable 자료형이더라도 객체로 저장된다. 사용 예시는 아래와 같다.
>>> nums = [1, 2, 3]
>>> nums.insert(0, [10, 20]) # 0번째(맨앞에) 추가
[[10, 20], 1, 2, 3]
>>> nums.insert(-1, 100) # 끝에서 1번째 전에 추가
>>> print(nums)
[[10, 20], 1, 2, 100, 3] # 리스트 맨 끝에 저장되지 않음
array의 끝에 추가하고 싶은 경우 array의 요소 개수가 적으면 하나하나 셀 수도 있지만 요소가 많은 경우 len( ) 함수를 이용할 수 있다. 위에서 생성한 nums 변수에 대해서 맨 마지막에 요소를 추가하는 경우는 아래 코드에서 작성해보았다.
>>> nums = [1, 2, 3]
>>> nums.insert(len(nums), 100)
[1, 2, 3, 100]
계속해서 세 개의 함수를 간략하게 비교 정리해본다.
4. 세 개의 함수 비교 정리
1) append 함수
arry.append(x) 형태로 사용한다. x를 arry의 맨 끝에 객체로 추가다. x가 iterable 자료형이더라도 전체를 하나의 객체로 해서 요소로 추가한다.
2) extend 함수
array.extend(iterable) 형태로 사용한다. iterable의 각 요소를 하나씩 array의 끝에 요소로 추가한다. append 함수와 다른 점은 괄호 안에 iterable 자료형만 올 수 있다.
3) insert 함수
array.insert(i, x) 형태로 사용한다. 원하는 위치 i에 x를 삽입할 수 있다. 값 x는 객체로 추가된다. append 함수와 마찬가지로 iterable 자료형이더라도 하나의 요소로 삽입된다.
.index() 란?
리스트 매소드 중에서 index()는 리스트 중에서 특정한 원소가 몇 번째에 처음으로 등장했는지를 알려주는데, 인덱스를 알려주기 때문에 index 라는 이름으로 되어 있다. 그런데 만약에 두 번 이상 원소가 중복되어 존재하는 경우에는 맨 처음 등장한 순간의 인덱스를 출력해준다는 점을 기억하자.
예제: 인덱스 찾기 (list.iindex)
아래와 같은 리스트를 정의했을 때,
>>> a = [123, 421, 212, 11, 24, 102, 29, 92, 10]
421이 몇 번째에 인덱스인지 확인해보자.
> > > a.index(421)
> > > 1
> > >
파이썬은 인덱싱이 0부터 시작이므로, 2번째에 있으므로, 1이 된다.
그렇다면, 원소들이 문자열의 경우에는 어떻게 되는지 살펴보자.
b = ['hi', 'hello', 'bye', 'hello', 'hi']
여기서는 앞의 숫자일 때와 마찬가지로 index() 매소드를 사용하면 되고, ‘hello’를 보면, 2번째와 4번째에 두 번 등장한다. 하지만, 아래의 결과를 보면, 두 번째의 인덱스만 보여준다는 것을 알 수 있다.
b.index('hello')
1
예제: 중복되는 원소들의 인덱스 모두 찾기 (numpy.where)
만약에 여러 번 등장하는 원소의 경우 모든 인덱스를 가져오고 싶으면, 여러 가지 방법이 있겠지만, numpy 패키지를 사용하는 방법을 소개하겠다.
우선 위에서 리스트로 정의한 b를 array로 변환 시켜 준다. numpy 패키지를 import로 불러 오고, .array() 매소드를 사용해서 기존에 리스트로 정의된 것을 array로 바꿔 준다.
import numpy
b = numpy.array(b)
그런 후, numpy.where() 매소드를 사용해서 특정한 값과 동일한 원소를 찾아낸 후, 이것의 인덱스를 출력하도록 하였다.
numpy.where(b == 'hello')[0]
array([1, 3])
여기서 보면, 0번째 값만 가져오게 했는데, .where() 매소드는 2개의 리턴값을 주는데, 여기서 첫 번째가 해당 인덱스 정보를 주기 때문에 0번째만 가져왔다.
참고문헌
파이썬 최소, 최대값을 찾는 함수min,max / dict min, max 함수 설명과 매개변수 key, default (Python)