728x90
- 계속 시간 초과가 남
- 틀린 원인 : 최빈값을 구하는 데에 너무 많은 시간 소요
- 이를 해결할 방법... 구글링해보니까 Collection 모듈이 있음 !
- 파이썬 서타일은 함수로 이쁘게 쓰는건가보다
틀린 풀이
import sys
n = int(sys.stdin.readline())
numbers = []
for i in range(n):
numbers.append(int(input()))
# 평균
sum = 0
for i in numbers:
sum += i
print(round(sum/n, 1))
# 중앙값
sort_numbers = numbers.sort()
print(sort_numbers[len(numbers)//2])
# 최빈
count = {}
for i in range(len(numbers)):
count[i] += 1
most = max(count.values())
max_list = []
for key, value in count.items():
if value == most:
max_list.append(key)
if len(max_list) > 1:
first = min(max_list)
max_list.remove(first)
second = min(max_list)
print(second)
else:
print(min(max_list))
# 범위
a = max(numbers) - min(numbers)
print(a)
이게 그 시간초과 나는 풀이이다 ㅠㅠ
두번째 시도 ! : Collection 모듈에 최빈값 세어주는게 있다 ㅋㅋㅋ 헐 파이썬..
근데 이런식으로 코딩테스트 준비해도 괜찮을까 ? 파이썬에는 너무 간편한 라이브러리가 많은데 시간이 느리다
맞은 풀이 !
import sys
from collections import Counter
n = int(sys.stdin.readline())
numbers = []
for i in range(n):
numbers.append(int(sys.stdin.readline()))
# 평균
print(round(sum(numbers)/n))
# 중앙값
numbers.sort()
print(numbers[len(numbers)//2])
# 최빈
count_dict = Counter(numbers)
modes = count_dict.most_common()
if len(modes) > 1:
if modes[0][1] == modes[1][1]:
mod = modes[1][0]
else:
mod = modes[0][0]
else:
mod = modes[0][0]
print(mod)
# 범위
a = max(numbers) - min(numbers)
print(a)
Counter 는 딕셔너리 형태로 각각의 요소가 몇개씩 등장했는지 세알려주고
most_common()은 최빈값을 리스트에 담긴 튜플 형태로 반환한다 !!!
if 문 다음에는 최빈값이 2개 이상인경우 두번째로 작은 값을 출력해야 하는데 이미 오름차순 정렬이 되어있으므로,
728x90
'Algorithm (PS)' 카테고리의 다른 글
[프로그래머스/카카오] 외벽점검 (0) | 2021.10.31 |
---|---|
백준 15868 치킨배달 파이썬, 삼성 SW 기출문제 (0) | 2021.10.26 |
백준 1697 숨바꼭질 파이썬 풀이 (0) | 2021.09.07 |
백준 1074 파이썬 - Z (2) | 2021.09.07 |
[백준 1652] 누울자리를 찾아라 파이썬 풀이 (0) | 2021.07.19 |