[BOJ] 2775: 부녀회장이 될테야

HwangDo·2023년 7월 11일
0

BOJ

목록 보기
1/2
post-custom-banner

한 문제에 대한 단순 풀이로 글을 쓰는것을 별로 좋아하지 않지만, 2년 전의 내가 풀었던 풀이를 보고 충격받아서 글을 쓴다.

문제 티어는 브론즈1이다.

접근

아파트 입주 조건은, 입력값과 무관하다. 테스트케이스가 여러개지만 N,K값에 따라서 각 층 각 호에 거주하는 사람의 수는 변하지 않는다는 뜻이다.
0층 i호에는 항상 i명이 거주한다.
한 층이 올라갈때마다 전 층의 1호부터 i호까지 거주민의 합을 구하면 된다.

1k,n141\leq k, n \leq14

라는 조건이 존재하므로, 15 * 15 크기의 리스트를 만들어준다. (입력 k값은 14지만, 0층이 존재함)
이후 0층을 모두 세팅 해 준다.

dp[k][n]=dp[k+1][n]+dp[k][n1]   (n1)dp[k][n] = dp[k+1][n]+dp[k][n-1] \;\ (n\leq1)

따라서 위 수식이 성립한다.
그 다음, 테스트케이스에서 입력받은 k, n값에 따라 출력해주면 된다.

정답 코드

dp = [[0 for j in range(15)] for i in range(15)]
for i in range(14):
    dp[14][i+1]=i+1
for i in range(13, -1, -1):
    for j in range(1,15):
        dp[i][j] = dp[i+1][j]+dp[i][j-1]
for _ in range(int(input())):
    n=int(input())
    k=int(input())
    print(dp[14-n][k])

2년 전 제출한 코드

import sys
input= sys.stdin.readline
case = int(input())
b= []
for i in range(case):
    k= int(input())
    n= int(input())
    a=list(range(1,n+1))
    floor = 0
    if n == 1 or n == 0:
        print(n)
    else:
        while floor < k:
            if not b:
                for j in range(0,n):
                    b.append(sum(a[:j+1]))
            if not a:
                for j in range(0,n):
                    a.append(sum(b[:j+1]))
            floor +=1    
            if a[1] > b[1]:
                b.clear()
            elif a[1] < b[1]:
                a.clear()
        if not b:
            print(a[n-1])
        if not a:
            print(b[n-1])
        a.clear()
        b.clear()

대학에 입학한지 한달 반이 되던 날 제출한 코드다.
나름대로 규칙도 정해두고 풀었던 것 같은데.. 무슨 코드인지 이해할수도 없고 저런 풀이도 통과를 했던게 신기하기도 하다
지금부터 2년 뒤의 나도 많이 성장해있길. 화이팅!

profile
제가 배워가는 내용과, 실수한 부분을 정리합니다
post-custom-banner

0개의 댓글