1. 개요
2. 풀이
import sys
def solution():
# 입력함수
INPUT = lambda: sys.stdin.readline().rstrip()
READ_NMK = lambda: map(int, INPUT().split())
N, M, K = READ_NMK()
# A, Z로 만들수 있는 갯수 배열만들기
DB = [[1]*(M+1) for _ in range(N+1)]
for a in range(1, N+1):
for b in range(1, M+1):
DB[a][b] = DB[a-1][b]+DB[a][b-1]
# 만약 K가 표시할수 있는 범위를 벗어나면 return -1
if DB[-1][-1]<K:
return -1
# 해당 문자열이 어디있는지 찾아간다
# 맨 앞에 문자를 붙이며 범위를 줄여간다.
answer = []
while N!=0 and M!=0:
# 맨앞에 a가 붙는 경우의수
aSide = DB[N-1][M]
if K>aSide: # z범위라면
answer.append("z")
M -= 1
K -= aSide # z범위에서 몇번째인지 확인을 위해 aSide를 뺀다.
else: # a범위라면
answer.append("a")
N -= 1
# 남은 문자열을 붙여준다.
while N:
answer.append("a")
N -= 1
while M:
answer.append("z")
M -= 1
return "".join(answer)
print(solution())
Leave a comment