728x90
반응형
https://www.acmicpc.net/problem/1201
1201번: NMK
첫째 줄에 세 정수 N, M, K가 주어진다.
www.acmicpc.net
문제 해결
- 먼저 수열을 구할 수 있기 위한 n의 범위를 알아야한다.
- m+k-1 ≤ n ≤ m*k 이다.
- n이 가장 작을 때는 [1, 2, 3, .. . m, m-1, m-2, . . . m+k-1] 수열이며
- n이 가장 클 때는 [k,k-1,k-2, . . . 1, 2*k, 2*k-1, . . . k+1, . . . m*k, m*k-1, . . . (m-1)*k + 1] 이다.
- m+k-1 ≤ n ≤ m*k 이다.
- n이 범위 안에 들어오면 처음으로 k개의 숫자를 내림차순해서 k개의 내림차순을 만든다.
- 이제 k+1~n까지 정렬해서 m-1개의 오름차순 수열을 만들어야한다.
- 여기서부터 너무 어려워서 찾아보게 되었다.
- m개의 내림차순 그룹을 만들 때 처음 1그룹에 k개의 내림차순 수열을 만들었으므로
- n -= k, m-=1 을 한다.
- m이 0이 될때까지
- 다음 그룹에 n//m개의 원소를 내림차순으로 넣고
- n 을 n//m 만큼 빼주고
- m -= 1 씩 빼주면서 그룹을 만들어 나간다.
CODE
n, m, k = map(int, input().split())
if m+k-1<=n<=m*k:
arr = [i for i in range(k,0,-1)]
n -= k
m -= 1
while m:
arr.extend(range(k+n//m,k,-1))
k += n//m
n -= n//m
m -= 1
print(*arr)
else:
print(-1)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 3055 탈출 (0) | 2023.09.04 |
---|---|
[python] 백준 21939 문제 추천 시스템 Version 1 (0) | 2023.08.30 |
[python] 백준 2671 잠수함식별 (0) | 2023.08.26 |
[python] 백준 17386 선분 교차 1 (0) | 2023.08.25 |
[python] 백준 19583 싸이버개강총회 (0) | 2023.08.21 |
댓글