728x90
https://www.acmicpc.net/problem/3989
3989번: 유행성 독감
첫째 날에 K, M, N이 주어진다. (1 ≤ K ≤ 1018, 3 ≤ M ≤ 1500, N < M) N은 첫째 날 독감에 걸린 사람의 수이다. 둘째 줄에는 첫째 날 독감에 걸린 사람이 공백으로 구분되어 주어진다.
www.acmicpc.net
# 런타임 에러. 중복 조합
k, m, n = map(int, input().split()) # 3, 100, 3
num = list(map(int, input().split())) # [2, 3, 4]
if k == 1: # 첫째날이면 [2, 3, 4] 그대로 출력
num.sort()
for i in num:
print(i, end= ' ')
else: # 첫째날 이후
# k = 2 이면 [2, 3, 4] 2H2 => [(2,2),(2,3),(2,4),(3,3),(3,4),(4,4)]
# k = 3 이면 [2, 3, 4] 3H2 =>
[(2,2,2),(2,2,3),(2,2,4),(2,3,3),(2,3,4),(2,4,4),(3,3,3),(3,3,4),(3,4,4),(4,4,4)]
a = list(set(list(itertools.combinations_with_replacement(num,k))))
aa = []
for i in range(len(a)):
mul = 1
for j in range(len(a[0])):
mul = (mul * a[i][j]) # mul = 1 * 2 => 2 * 2 => 2 * 2
if mul >= m: # 마을 인원 수 보다 크면 나머지 삽입
aa.append(mul%m)
else: # 마을 인원 수 보다 작으면 그대로 삽입
aa.append(mul)
aa = list(set(aa))
aa.sort()
for i in aa:
print(i, end = ' ')
# 시간 초과
k, m, n = map(int, input().split()) # 3, 100, 3
num = list(map(int, input().split())) # [2, 3, 4]
case = num
for K in range(k-1):
next = set()
for j in range(n):
for i in range(len(case)):
if num[j]*case[i]%m not in next:
next.add(num[j]*case[i]%m) # {4, 6, 8, 9, 12, 16} => {32, 64, 36, 8, 12, 16, 48, 18, 24, 27}
case = list(next) # [4, 6, 8, 9, 12, 16] => [32, 64, 36, 8, 12, 16, 48, 18, 24, 27]
next = list(next)
next.sort()
for i in next: # [8, 12, 16, 18, 24, 27, 32, 36, 48, 64]
print(i, end = ' ')
# 시간 초과 - 한 배열만 쓰기, 깊은 복사
import copy
k, m, n = map(int, input().split()) # 3, 100, 3
num = list(map(int, input().split())) # [2, 3, 4]
first = copy.deepcopy(num) # 깊은 복사
for K in range(k-1):
pre = len(num) # 6 => 9
for j in range(len(num)):
for i in range(n):
if num[j]*first[i]%m not in num[pre:]:
num.append(num[j]*first[i]%m)
# [2,3,4,4,6,8,9,12,16] => [4, 6, 8, 9, 12, 16, 8, 12, 16, 18, 24, 32, 27, 36, 48, 64
del num[:pre]
# [4,6,8,9,12,16] => [8, 12, 16, 18, 24, 32, 27, 36, 48, 64]
num.sort()
for i in num: # [8, 12, 16, 18, 24, 27, 32, 36, 48, 64]
print(i, end = ' ')
반응형
'전.py' 카테고리의 다른 글
백준 1697 숨바꼭질 (0) | 2020.12.13 |
---|---|
백준 14225 부분수열의 합 (0) | 2020.12.13 |
백준 2740 행렬 곱셈 (0) | 2020.12.13 |
백준 2669 직사각형 네개의 합집합의 면적 구하기 (0) | 2020.12.13 |
백준 6603 로또 (0) | 2020.12.12 |