알고리즘 문제들 으악/백준

[python]2775번, 역대급 길이

빈나 2022. 4. 1. 23:07
반응형

본론으로 가겠다

for i in range(int(input())):
    a=int(input())
    b=int(input())
    e=[]
    f=[]
    for c in range(b):
        for d in range(a+1):
            if c==0:
                e.append(1)
            elif c%2==0:
                if d==0:
                    e.clear()
                    e.append(c+1)
                    continue
                e.append(f[d]+e[d-1])
            elif c%2==1:
                if d==0:
                    f.clear()
                    f.append(c+1)
                    continue
                f.append(e[d]+f[d-1])
    if b%2==1:
        print(e[a])
    else:
        print(f[a])

나는 이문제를 행기준으로 생각해서 풀었다.
즉 세로 한줄씩 위로 쌓아 갈려고 했다. 내가 찾은 규칙은
1 2
1 2
아파트 층과 호수가 이렇게 있을때 2층 2호의 값은 2층 1호 값+ 1층 2호의 값이여서 대각선을 더하게끔 만들었다. 이때 전 라인의 값이 필요해서 홀 수 라인에는 e[], 짝수라인에는 f[]리스트를 설정해 값을 저장해 계산에 이용했다.


T = int(input())

for _ in range(T):
    k = int(input())
    n = int(input())
    P = [i for i in range(1, n+1)]
    for _ in range(k):
        for j in range(1, n):
            P[j] += P[j-1]
    print(P[-1])

다른 고수님의 풀이를 보니 역시 깔끔했다. 내가 행 기준으로 생각을 했다면 이분은 열을 기준으로 생각했다. 이것이 더 효율적인 이유는 문제의 결대로 밑에 층 호수들의 값을 더하면 원하는 값이 나와, 굳이 나처럼 다른 라인들까지 끌어 들일 필요가 없었다.
그래서 리스트를 만들어 층수 만큼 자기 호수들 값을 현재 값에 더해가면서 목표 층의 호수값을 -1로 반환 할 수 있다.

코드가 길어지고 하는 이유를 생각해 봤을때 너무 쓸떼없는 부분까지 구현을 해가면서 어렵게 짜는게 아닌가 생각하기도 한다. 그만큼 아직 문제에 숙달 되지 않아서 그런거 같기도 하다.
많이 풀어서 숙련되고 싶다.

반응형