리스트의 가장 큰 수 개수가 가장 작은 수 개수보다 몇 배인가
글. 오상문 sualchi@daum.net
[입력] 정수 리스트 (최대 길이 1000개)
[출력] 큰수 개수를 작은 수 개수로 나눈 값 (소수점 이하를 버린 정수)
#------------------------------------------
def solution(arr):
max_n = max(arr) # 가장 큰 값
min_n = min(arr) # 가장 작은 값
cnts = [0 for _ in range(1001)] # 카운트 리스트
for n in arr: # 리스트에서 정수 값을 가져와서
cnts[n] += 1 # 값 위치의 카운트를 올림
return cnts[max_n] // cnts[min_n] # 나눈 값 돌려줌
#------------------------------------------
# solution2()는 자료가 적을 때 solution()과 속도가 비슷하지만,
# 자료가 많아지면 속도가 떨어진다.
def solution2(arr):
cnts = [0 for _ in range(1001)]
max_n = arr[0] # 최대값 변수
min_n = max_n # 최소값 변수
for n in arr: # 리스트 값을 하나씩 가져와서
if n > max_n: max_n = n # 최대값 갱신
elif n < min_n: min_n = n # 최소값 갱신
cnts[n] += 1 # 카운트 갱신
return cnts[max_n] // cnts[min_n] # 반환
#------------------------------------------
# 테스트
alist = [1,2,3,3,1,3,3,2,3,2]
print(solution(alist),solution2(alist)) # [출력] 2 2
#----------------------------------------
# 시간 측정
import time
alist = [1,2,3,3,1,3,3,2,3,2,7,8,3,5,1,9,3,6,3,4,7,
8,3,5,1,9,3,6,3,4,8,3,5,1,9,3,6,3,4,2,3,2,
1,2,3,3,1,3,3,2,3,2,7,8,3,5,1,9,3,6,3,4,7]
start = time.time()
for i in range(50000):
solution(alist)
print(time.time() - start)
start = time.time()
for i in range(50000):
solution2(alist)
print(time.time() - start)
<이상>
'Python 기초' 카테고리의 다른 글
파이썬, 팰린드롬 문장이나 단어 확인하기 (0) | 2019.10.21 |
---|---|
파이썬, 3의 배수 또는 5의 배수 리스트 만드는 다양한 방법 (0) | 2019.10.19 |
파이썬, 패킹(packing) 언패킹(unpacking) (0) | 2019.10.16 |
파이썬, 같은 해의 두 날짜 사이 간격 (0) | 2019.10.15 |
파이썬, 정수가 0인지 검사하는 다양한 방법과 속도 비교 (0) | 2019.10.15 |