[백준] 10989, 11047 - Python3

shsh·2021년 12월 16일

백준

목록 보기
34/45

10989. 수 정렬하기 3

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

내 풀이 - 성공

from sys import stdin
import collections

N = int(stdin.readline())

nums = collections.defaultdict(int)

for i in range(N):
    n = int(stdin.readline())
    nums[n] += 1

nums = sorted(nums.items())

for k, v in nums:
    for _ in range(v):
        print(k)

nums 라는 딕셔너리를 이용해서 입력받은 숫자들의 개수를 저장

nums 의 key 를 기준으로 정렬 후 개수 만큼 print

다른 사람의 풀이

from sys import stdin

N = int(stdin.readline())

nums = [0]*10001

for i in range(N):
    n = int(stdin.readline())
    nums[n] = nums[n] + 1

for i in range(10001):
    for j in range(nums[i]):
        print(i)

N 의 범위가 10,000 보다 작거나 같은 자연수라고 주어졌으므로
처음부터 nums 의 길이를 10001 로 잡음

인덱스를 숫자로, 배열의 값은 개수로 사용해서 입력받은 숫자의 개수를 모두 저장

10001 개의 숫자들을 모두 보면서 개수만큼 print

정렬 없이 사용할 수 있다!!


11047. 동전 0

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

내 풀이 - 성공

from sys import stdin

N, K = map(int, stdin.readline().split())
coins = []
ans = 0

for _ in range(N):
    c = int(stdin.readline())
    coins.append(c)

for i in range(N-1, -1, -1):
    if coins[i] <= K:
        ans += K // coins[i]
        K = K % coins[i]

print(ans)

coins 는 이미 정렬된 상태이므로 큰 값부터 K 에서 빼기 위해 역순으로 for 문 돌리기

coins[i] 가 K 보다 작아지는 순간의 coins[i] 를 K 에서 최대한 많이 빼기
=> K // coins[i]
(반복문으로 직접 빼면 시간 초과)

profile
Hello, World!

0개의 댓글