링크 : https://www.acmicpc.net/problem/2108
- 문제
- 소요시간: 33분 22초
- 설계하기(접근방법)
1. 입력받기
입력의 수가 많으니 sys를 import 한다
2. 구현하기
입력이 50만개이니 충분히 sort가 가능하다
따라서 중앙값, 최대와 최소는 sort를 통해 구현해준다
최빈값의 경우, 모든 입력마다 체크하면
상당히 비효율적이다
따라서 딕셔너리를 활용해서
각 숫자의 입력 횟수를 저장한다.
1. 입력이 1개라면 그 숫자를 출력
2. 입력이 여러 개라면,
딕셔너리에서 key,value를 temp라는 배열에 추출한다.
lambda 함수를 활용하여처 최빈값과 숫자의 크기를 기준으로 sort()한다.
0번째 원소의 횟수보가 1번째의 횟수보다 크면 0번째 출력
둘이 횟수가 같다면 1번째를 최빈값으로 출력한다
3. 출력하기
각 요구사항을 출력한다
- 코드(출력)
import sys, math
input = sys.stdin.readline
n = int(input())
arr = []
dic = {}
for i in range(n):
k = int(input())
arr.append(k)
if k in dic:
dic[k] += 1
else :
dic[k] = 1
arr.sort()
temp = []
for key, value in dic.items():
temp.append([key, value])
temp.sort(key = lambda x : (-x[1], x[0]))
if len(temp) == 1:
frequent = temp[0][0]
else:
if temp[0][1] > temp[1][1]:
frequent = temp[0][0]
else:
frequent = temp[1][0]
avg = int(round((sum(arr) / n)))
middle = arr[(n // 2)]
mini = arr[0]
maxi = arr[n -1]
print(avg)
print(middle)
print(frequent)
print(maxi - mini)
- 얻어갈 부분
1. 딕셔너리를 활용할 때, 없는 숫자를 키로 지정하고 싶은 경우,
if 와 in을 활용하여 없다면 선언, 있다면 증가시키는 방식을 활용하자
2. round 함수의 인자를 다시 알아놓자
'알고리즘(백준) > 구현' 카테고리의 다른 글
[알고리즘/구현] 3085번 : 사탕 게임 - python (0) | 2024.06.07 |
---|---|
[알고리즘/구현] 18111번 : 마인크래프트 - python (0) | 2024.05.22 |
[알고리즘/구현] 10773번 : 제로 - python (0) | 2024.05.22 |
[알고리즘/구현] 11866번 : 요세푸스 문제 0 - python (0) | 2024.05.22 |
[알고리즘/구현] 13335번 : 트럭 - python (0) | 2024.03.01 |