안녕하세요. 모카의 머신러닝 입니다. 이번 포스팅에서는 백준 알고리즘 문제 풀이에 대해 포스팅하도록 하겠습니다.
코드는 이곳을 참고했음을 밝힙니다.
1. 조합
백준 1722번
https://www.acmicpc.net/problem/1722
import sys
input = sys.stdin.readline
F = [0] * 21
S = [0] * 21
visited = [False] * 21
N = int(input())
F[0] = 1
for i in range(1, N+1):
F[i] = F[i-1] * i
inputList = list(map(int, input().split()))
if inputList[0] == 1:
K = inputList[1]
for i in range(1, N+1):
cnt = 1
for j in range(1, N+1):
if visited[j]:
continue
if K <= cnt*F[N-i]:
K -= (cnt-1) * F[N-i]
S[i] = j
visited[j] = True
break
cnt += 1
for i in range(1, N+1):
print(S[i], end=' ')
else:
K = 1
for i in range(1, N+1):
cnt = 0
for j in range(1, inputList[i]):
if not visited[j]:
cnt += 1
K += cnt * F[N-i]
visited[inputList[i]] = True
print(K)
백준 1256번
https://www.acmicpc.net/problem/1256
import sys
input = sys.stdin.readline
N, M, K = map(int, input().split())
D = [[0 for j in range(202)] for i in range(202)]
for i in range(0, 201):
for j in range(0, i+1):
if j==0 or j==i:
D[i][j] = 1
else:
D[i][j] = D[i-1][j-1]+D[i-1][j]
if D[i][j]>1000000000:
D[i][j] = 1000000001
if D[N+M][M] < K:
print(-1)
else:
while not (N==0 and M==0):
if D[N-1+M][M] >= K:
print("a", end='')
N -= 1
else:
print("z", end='')
K -= D[N-1+M][M]
M -= 1
백준 1947번
https://www.acmicpc.net/problem/1947
N = int(input())
mod = 1000000000
D = [0]*1000001
D[1] = 0
D[2] = 1
for i in range(3, N+1):
D[i] = (i-1)* (D[i-1] + D[i-2]) % mod
print(D[N])
지금까지 백준 알고리즘 조합 2 부분이었습니다.
읽어주셔서 감사합니다. 😃