출처 :
출처:
https://www.acmicpc.net/problem/2108
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
풀이 :
from collections import Counter
import sys
n = int(sys.stdin.readline())
stat = []
for _ in range(n):
stat.append(int(sys.stdin.readline()))
a = sum(stat)/len(stat)
print(int(round(a,0)))
#2
stat.sort()
b = len(stat)//2
print(stat[b])
#3
cnt = Counter(stat).most_common(2)
if len(stat) > 1:
if cnt[0][1] == cnt[1][1]:
print(cnt[1][0])
else:
print(cnt[0][0])
else:
print(cnt[0][0])
#4
d = stat[-1] - stat[0]
print(d)
시간 초과 때문에 익숙하지 않은 int(sys.stdin.readline()) 을 사용해주고 입출력은 별 다른것이 없다.
문제가 3번 빼고는 전체적으로 쉬워서 간단하게 짚고 넘어가겠다.
1. 반올림을 할 줄 아냐? 이게 핵심인거 같다. round(a,0) 을 쓰면 소수 첫째자리에서 반올림한다.
2. 이건 n이 홀수 이기 때문에 n//2 값이 딱 중앙일것이다. 그렇게 출력하면된다.'
4. 위에서 sort를 했기 때문에 맨뒤 [-1] 맨 앞 [0] 을 빼준다.
3. dictionary로 푸는 방법이 있는데.... 계속 회피하고 있다... 근데 더 좋은 내장함수가 있는데 굳이 써야하나 싶기도 해서 한번만 더 미루겠다.
from collections import Counter
를 써서 Counter를 불러오고
이 Counter는 리스트나 딕셔너리에 있는 값에 개수를 세주는 것이다.
따라서 cnt를 위 같이 표현하면
가장 많은 순서대로 2개가 [(x,y), (x2,y2)] 이렇게 출력 될것이다.
앞으로 자주 사용할 것같다.
'코딩테스트' 카테고리의 다른 글
백준 18870 좌표 압축 - python (0) | 2022.01.17 |
---|---|
백준 10814 나이순 정렬 (0) | 2022.01.17 |
백준 1436 영화감독 슘 (0) | 2022.01.15 |
백준 1018 체스판 다시 칠하기 (0) | 2022.01.15 |
백준 7568 덩치 - python (0) | 2022.01.15 |