1. 중복 포함/제거, sorting 활용
배열을 내림차순 정렬하고, 두 번째 값을 출력한다.
arr = [10,30,30,20]
sorted(arr, reverse=True)[1]
#30
만약 중복을 허용하지 않고 두 번째 큰 값을 출력하고 싶으면 set 함수를 이용한다.
arr = [10,30,30,20]
uniq = set(arr)
sorted(uniq, reverse=True)[1]
#20
set()
을 통해 정렬 전에 고유한 값만 남기는 작업을 추가하면 된다.
2. 중복 제거, for문
최대값과 두 번째 큰 값을 추적하는 변수를 두고, 배열의 각 값을 순회하며 두 변수를 갱신한다.
first는 가장 큰 값, second는 두 번째로 큰 값이 들어갈 변수다.
def findsecond(arr):
second = first = -float('inf')
for n in arr:
if n > first:
second = first
first = n
elif second < n < first:
second = n
return second
findsecond([30,30,10])
#10
최대값과 두 번째 큰 값을 추적할 변수 first, second 변수를 음의 무한으로 초기화한다.
반복문은 각 case에 대하여 다음과 같이 작동한다.
- 현재 최대값(
first
)보다 클 경우:first
와second
모두 갱신한다. 먼저 두 번째 값을 이전 최대값으로 재설정하고, 최대값에n
을 둔다.
- second보다 크고 first보다 작은 경우:
second
만 갱신한다.
- 그 외:
- 무시한다.
3. 확장 - K번째 큰 값
다음글 참조
'Python > Algorithm' 카테고리의 다른 글
문자열 - 다이얼 (0) | 2020.03.12 |
---|---|
정수를 자릿수별로 쪼개기 (0) | 2020.03.12 |
한수 (0) | 2020.03.12 |
Self number 셀프 넘버 (0) | 2020.03.12 |
숫자 배열에서 K번째 큰 값 찾기 (0) | 2020.03.10 |