본문 바로가기
IT/알고리즘

1일 N알고리즘 - #40

by Sungjun_ 2020. 6. 9.

문제

https://www.acmicpc.net/problem/2108

 

2108번: 통계학

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

www.acmicpc.net

문제는 위 사이트를 참고해주세요.

 


풀이

import sys
N = int(input())
lst = []
dic = {}

for i in range(N):
    x = int(sys.stdin.readline())
    lst.append(x)
    if x in dic:
        dic[x] += 1
    else:
        dic[x] = 1
lst.sort()

temp = []
for i in dic:  # 최빈값을 찾아 리스트에 넣음
    if dic[i] == max(dic.values()):
        temp.append(i)
temp.sort()

mid = len(lst) // 2
print(round(sum(lst) / N))  # 산술 평균
print(lst[mid])  # 중앙 값
if len(temp) > 1:  ## 최빈값
    print(temp[1])
else:
    print(temp[0])
print(max(lst)-min(lst))  # 범위

 

먼저 숫자의 개수를 입력받습니다.

그리고 리스트와 딕셔너리를 만들어줍니다.

 

첫 for문을 돌릴 때마다 숫자를 입력받고 리스트와 딕셔너리에 넣어줍니다.

이 때, 중복되는 수를 생각해 이미 딕셔너리에 있다면 +1을 해줍니다.

 

for문이 끝나고 리스트를 정렬해줍니다.

 

그리고 최빈값을 넣을 리스트 temp를 만들고

두 번째 for문은 최빈값을 찾아 temp에 넣어줍니다.

끝나면 temp를 정렬해줍니다.

 

다른 부분은 크게 어려운게 없고

if문은 최빈값이 2개 이상이면 두 번째로 작은 값을 출력하기 때문에 temp[1]을 출력,

최빈 값이 하나면 temp[0]을 출력하게 만들기 위해섭니다.

 


결과

결과 화면

'IT > 알고리즘' 카테고리의 다른 글

1일 N알고리즘 - #42  (0) 2020.07.01
1일 N알고리즘 - #41  (0) 2020.06.11
1일 N알고리즘 - #39  (0) 2020.06.09
1일 N알고리즘 - #38  (0) 2020.06.08
1일 N알고리즘 - #37  (0) 2020.06.06

댓글