백준 - 단계별 문제풀기(10989번, 2108번)

유다송·2022년 9월 13일
0

10989번

import sys

n = int(input()) #입력받는 수의 개수 n
n_list = [0] * 10001 # 리스트크기 <= 10000
for i in range(n):
    n_list[int(sys.stdin.readline())] += 1
for i in range(10001):
    if n_list[i] != 0:
        for j in range(n_list[i]):
            print(i)
  • 계수정렬 알고리즘

    • 배열의 인덱스를 특정한 데이터의 값으로 여기는 정렬 방법
    • 배열의 크기는 데이터의 범위를 포함할 수 있도록 설정
    • 데이터가 등장한 횟수를 셈
  • 일반적으로 sort를 쓰면 시간초과가 나는 문제이다.

  • 리스트를 만들고 각각의 리스트에 0이라는 값을 할당해준다.

  • 그 리스트에다가 값을 할당해줄때마다 1을 더해준다.

  • 입력을 다 받고나면 0보다 큰 요소를 갖고 있는 인덱스를 찾아서 출력해주면 됨.

2108번

from collections import Counter
import sys

input = sys.stdin.readline

n = int(input())
arr = []

for _ in range(n):
    arr.append(int(input()))
    
arr.sort()
    
print(round(sum(arr)/n))

print(arr[n//2])

temp = Counter(arr).most_common()
if len(arr) > 1:
    if temp[0][1] == temp[1][1]:
        print(temp[1][0])
    else:
        print(temp[0][0])
else: 
    print(temp[0][0])

print(max(arr) - min(arr))
  • 파이썬의 Counter 클래스는 iterable의 원소의 개수를 셀 때 편리하게 사용할 수 있는 기능으로, 딕셔너리 객체와 유사하다.

Counter

from collections import Counter
  • clear() : 카운터 객체에서 모든 key-value 쌍을 제거
  • copy() : 카운터 객체의 복사본을 반환
  • elements() : 카운터 숫자만큼 요소 반환
  • 리스트를 가지고 카운터 객체를 만들었다면, 다시 리스트로 돌린다고 생각하면 쉽다. 물론 순서는 바뀐다. list(c2.elements())와 같이 사용.
  • get() : 인자로 key를 입력하면 해당 key와 매칭되는 value를 반환
  • items() : key, value 쌍을 튜플 형태로 반환
  • keys() : 카운터 객체의 key들을 반환
  • most_common() : 가장 빈도수가 높은 key, value 쌍부터 튜플 형태로 반환. 인자로 숫자(개수)를 전달하면 가장 빈도수가 높은 것부터 해당 개수만큼의 쌍만이 반환됨
  • pop() : 인자로 key를 반드시 전달해야 하며, key와 매칭되는 value를 반환하고 해당 key, value 쌍을 카운터 객체에서 제거
  • popitem() : 전달하는 인자가 없어야 하며, 가장 뒤의 key, value 쌍을 튜플 형태로 반환하고 해당 쌍을 카운터 객체에서 제거
  • setdefault() : 카운터 객체에 key, value 쌍을 추가할 때 사용할 수 있음
    - key만 전달하면 카운트 수는 디폴트로 None
    - key와 함께 default=10과 같이 전달하면 key에 해당하는 카운트에 입력한 숫자가 반영됨
  • subtract() : iterable을 전달하면 각 요소의 값을 각각 빼주고 그 결과의 카운트는 마이너스 값을 가질 수도 있음
  • update() : iterable을 전달하여 같은 값이 있으면 카운트가 추가되게 하고 없으면 새로운 key, value 쌍을 생성
  • values() : 카운터 객체의 value, 즉 카운트들을 반환
  • 이 외에 더하기, 빼기, 교집합, 합집합 연산도 가능하다. 빼기 연산에서 카운트가 음수 값을 가지게 만들고 싶다면 subtract()를 사용하자.

0개의 댓글