리스트의 가장 큰 수 개수가 가장 작은 수 개수보다 몇 배인가

글. 오상문 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)

 

<이상>

 

반응형

+ Recent posts