[백준/Python] 2108. 통계학

띵슈롱·2023년 10월 18일
0

PS(Problem Solving)

목록 보기
6/17

문제

문제 접근

이 문제는 문제에 풀이 과정이 다 나와있어서 문제에 나와 있는 대로 코딩을 했다.

  1. 산술평균

  2. 중앙값
    정렬 해서 가운데 값을 찾았고

  3. 최빈값
    요소 개수를 count 해주는 counter 모듈을 이용했다.

  4. 최대 최소 차이

문제 풀이(실패)

from collections import Counter
n = int(input())

arr = sorted([int(input()) for _ in range(n)])

print(int(round(sum(arr)/len(arr),0))) #산술평균
print(arr[len(arr) // 2]) #중앙값
# 최빈값
cnt = Counter(arr).most_common()
if len(cnt) > 1:
    print(arr[1])
else:
    print(Counter(arr).most_common(1)[0][0])

#범위 최대 최소 차이
print(arr[len(arr)-1] - arr[0])

처음에 이렇게 풀었는데 오답이 나왔다.
최빈값 구하는 곳에서 문제를 다시 읽어보니 최빈값이 여러개 일 땐 최빈 값 중에 2번째 요소를 구해줘야 했지만 나는 그냥 배열의 2번째 값으로 출력했다.

문제 풀이

from collections import Counter
import sys
n = int(input())

arr = sorted([int(sys.stdin.readline()) for _ in range(n)])

print(round(sum(arr)/len(arr))) #산술평균
print(arr[len(arr) // 2]) #중앙값
# 최빈값
cnt = Counter(arr).most_common(2)

if len(cnt) > 1:
    if cnt[0][1] == cnt[1][1]:
        print(cnt[1][0])
    else:
        print(cnt[0][0])
else:
    print(cnt[0][0])

#범위 최대 최소 차이
print(max(arr) - min(arr))

다시 풀었을때 시간초과가 떠서 sys로 인풋 받고
pypy3으로 제출 했다

문제에 풀이가 다 나와있어서 쉽게 풀리겠거니 했는데,
최빈값 구하는 부분에서 살짝 애를 먹었다.

profile
어떻게 하는겨?

0개의 댓글