[백준] 2108번 : 통계학(counter)- 파이썬[Python]

    728x90

    문제

     

    2108번: 통계학

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

    www.acmicpc.net

    풀이

    from collections import Counter
    import sys
    N=int(sys.stdin.readline())
    list1=[]
    for i in range(N):
      list1.append(int(sys.stdin.readline()))
    
    list1.sort()
    print(round(sum(list1)/len(list1)))
    print(list1[len(list1)//2])
    
    c_n=Counter(list1).most_common()
    if len(c_n)>1:
      if c_n[0][1]==c_n[1][1]:
        print(c_n[1][0])
      else:
        print(c_n[0][0])
    else:
      print(c_n[0][0])
    
    print(max(list1)-min(list1))

    파이썬 내장모듈의 counter 함수와 sys를 사용해야 풀리는 문제.

    처음에는 for문 으로 count()랑 입력값 하나하나 구하는 코드짜다가

    이건 아닌 것 같아서 찾아보니 빈도수를 간편하게 구할 수 있는 counter 함수가 존재했다. 

     

    IT초심자인 내가 파이썬의 모든 함수를 아는 것이 아니니 좀 더 효율적으로 공부하려면 브루트 포스 문제가 아닌 이상

    간단한걸 구현하는데 너무 복잡한 반복문이 필요하면 해당 함수가 존재하는지 여부부터 알아봐야겠다.

     

    counter 함수를 사용해도 시간초과가 떠서 보니 input()으로 해놔서 시간초과가 된 것이었다.

    input()이 너무 손에 익어버려서 풀릴 문제도 안풀리는 경우가 간혹 있다.

    sys.stdin.readline()를 사용하는 습관을 들여야겠다.

    댓글