less than 1 minute read

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