소스 코드

T = int(input())

for tc in range(1,1+T):
    n,p = map(int,input().split())

    res = 1

    cnt = n - n//p*p

    for q in range(p-cnt):
        res *= (n//p)

    for w in range(cnt):
        res *= (n//p+1)

    print('#{} {}'.format(tc,res))

 


해결 방법

1. 조합으로 해결하려 했는데, 연산이 너무 많아질 것이라 생각

 

2. 10 3 의 최대 값은 3 * 3 * 4 / 20 5 의 최대 값은 4 * 4 * 4 * 4 * 4에서 아이디어를 얻음

 

3. (n//p) * (n//p) * (n//p+1) ... 의 형태로 최대 값을 구할 수 있을 것이라 가정

 

4. cnt = n - n//p*p 를 통해 (n//p+1)을 몇 번 사용할 것인지를 계산

 

5. 이후 p-cnt만큼 (n//p)를 곱하고, cnt만큼 (n//p+1)을 곱하여 문제 해결


느낀 점

아이디어 문제가 맞는지는 모르겠다...

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.