본문 바로가기
코딩테스트/코딩테스트 문제

코딩테스트 준비 - 백준2108번 풀이/파이썬 반올림, 원소 개수 구하기(파이썬)

by 공부가싫다가도좋아 2021. 6. 1.
반응형

백준 2108번 풀이


문제풀러가기

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


문제


풀이

1. 산술평균: round()함수 활용

더보기

round() 반올림 함수

ex1) round(3.6) = 4

ex2) round(3,2) = 3

ex3) round(3.425, 1) = 3.4

ex4) round(4.1729, 3) = 4.173

 

2. 중앙값: // <- 몫 구하기 활용

더보기

5//2 = 2

6//2 = 3

 

3. 최빈값: collections 모듈의 Counter클래스 활용.

더보기

ex)

from typing import Counter

 

arr=[1,2,3,3,6,2,1,4,4,4,5,5,5]

cnt = Counter(arr)

print("Counter(arr) =",cnt)

#Counter(arr) = Counter({4: 3, 5: 3, 1: 2, 2: 2, 3: 2, 6: 1})

 

cnt = Counter(arr).most_common()

print("Counter(arr).most_common() =",cnt)

#Counter(arr).most_common() = [(4, 3), (5, 3), (1, 2), (2, 2), (3, 2), (6, 1)]

 

print("len(cnt) =",len(cnt))

#len(cnt) = 6

 

4. 최대값 - 최소값 = 범위

더보기

arr = [1, 5, 8]

max(arr) = 8

min(arr) = 1


코드-실패(시간초과)

처음엔 Counter클래스 활용을 안하고 list.counter()을 써서, 

제일 큰 counter을 또 다른 리스트에 집어 넣고, set으로 리스트 중복 값 제거를 해 준다음

sort()  로 정렬 후 그 중에 두번째로 작은 수를 출력하는 방식으로 했습니다. 그랬더니 시간 초과... ㅠ_ㅠ

import sys
N = int(sys.stdin.readline())
arr = []
arr_min = []
sum = 0;
cnt=0

for i in range (N):
  arr.append(int(sys.stdin.readline()))
  sum+=arr[i]

arr.sort()
print(round(sum/N)) #합
print(arr[len(arr)//2]) #중앙값

#---------------------------------#
for i in range (N):
  a = arr.count(arr[i])
  if a>= cnt:
    cnt = a

for i in range(N):
  a = arr.count(arr[i])
  if a == cnt:
    arr_min.append(arr[i])

arr_min = list(set(arr_min)) #리스트 중복 제거
arr_min.sort()
if len(arr_min) == 1: #리스트에 숫자가 하나밖에 없다면
  print(arr_min[0])
else:    #리스트에 숫자가 많아도 무조건 두번째로 작은 수
  print(arr_min[1])
 
print(max(arr)-min(arr)) #범위

코드-성공

import sys
from typing import Counter
N = int(sys.stdin.readline())
arr = []

for i in range (N):
  arr.append(int(sys.stdin.readline()))

arr.sort()
print(round(sum(arr)/N)) #합의 반올림
print(arr[len(arr)//2]) #중앙값

cnt = Counter(arr).most_common() 

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)) #범위



 

반응형

댓글