https://www.acmicpc.net/problem/2108
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
우선 N이 1일 때는 모든 계산에서 예외처리 해줬다. 코드대로 한다면 엉뚱한 답이 나오기에.
전체코드에서 for문부터 나름 1~4번째 출력값별로 단락을 나눠 구별해줬는데... 알아보기 편하려나.
-먼저 sum을 이용해 리스트 값을 더해 산술평균을 구했다. round 처리해 반올림도 잊지 않았다.
-리스트를 오름차순으로 정렬한 후, N//2번째 리스트 값으로 중앙값을 구해주고.
-대망의 최빈값인데. 힘겹게 코드를 일일이 다 구현해줬더니 시간초과가 발생했다. 역시 만들어둔게 좋은 것...ㅋㅋ
Counter를 이용해줬다. Counter는 예시로 이해하는 편이 쉽다.
ex)
a = Counter('hello')
print(a)
출력 : Counter({'l': 2, 'h': 1, 'e': 1, 'o': 1})
a = Counter('hello').most_common()
print(a)
print(a[0][0], a[0][1])
출력 : [('l', 2), ('h', 1), ('e', 1), ('o', 1)]
출력 : l 2
a = Counter('hello').most_common(2)
print(a)
출력 : [('l', 2), ('h', 1)]
이 문제에선 조건이 더 있기 때문에 most_common을 이용해 최빈값 2개를 뽑아낸다.
<헛다리 탐구>
어 그런데.. 하다보니 이상한 점을 발견했다.
a = Counter([2, 2, 5, 5, 4, 4, 0]).most_common(2)
print(a)
출력 : [(2, 2), (5, 2)]
입력순서대로 2가지를 처리해주는 것 같은데.. 이렇게 되면 내가 적은 코드는 5를 최빈값으로 도출해낼 듯 싶다. 정답은 4인데.
라고 생각했다가 곧바로 이유를 알게 됐다!ㅋㅋ 내가 이전에 리스트를 오름차순으로 정렬해줬기 때문에, 오히려 위 코드의 입력값에 오류가 있다고 볼 수 있겠다. [0, 2, 2, 4, 4, 5, 5]로 입력될테니 내 제출이 틀리지 않았던 것...!
우연찮게 새로운 지식을 얻게 되었다ㅋㅋㅋ 굿
-마지막 범위는 그리 어렵지 않게 구현 가능하다.
import sys
from collections import Counter
N = int(input())
if N == 1:
n = int(sys.stdin.readline())
print(n)
print(n)
print(n)
print(0)
quit()
nums = []
for i in range(N):
nums.append(int(sys.stdin.readline()))
print(round(sum(nums)/N))
nums.sort()
print(nums[N//2])
three = Counter(nums).most_common(2)
if three[0][1] == three[1][1]:
print(max(three[0][0], three[1][0]))
else:
print(three[0][0])
print(abs(nums[N-1]-nums[0]))
'[Python]BaekJoon.AC' 카테고리의 다른 글
[Python]백준 BaekJoon.AC 10773 : 제로(deque) (0) | 2022.01.21 |
---|---|
[Python]백준 BaekJoon.AC 9012 : 괄호(스택, 리스트) (0) | 2022.01.21 |
[Python]백준 BaekJoon.AC 4949 : 균형잡힌 세상(list, stack) (0) | 2022.01.21 |
[Python]백준 BaekJoon.AC 2164 : 카드2(deque, queue) (0) | 2022.01.20 |
[Python]백준 BaekJoon.AC 1978 : 소수 찾기(에라토스테네스의 체) (0) | 2022.01.20 |
[Python]백준 BaekJoon.AC 1920 : 수 찾기(이분탐색) (0) | 2022.01.19 |
[Python]백준 BaekJoon.AC 11651 : 좌표 정렬하기2(sys, sort()) (0) | 2022.01.16 |
[Python]백준 BaekJoon.AC 11650 : 좌표 정렬하기(sys, sort()) (0) | 2022.01.15 |