[BaeKJoon] 2747, 10844, 11057, 2193

고관운·2022년 10월 30일

1. 2747(피보나치 수)

🔵 코드

n = int(input())

mlist = [0] * 46
mlist[1] = 1
mlist[2] = 1

# DP 바텀업 방식
for i in range(3, n+1):
    mlist[i] = mlist[i-1] + mlist[i-2]
    
print(mlist[n])

🔵 풀이 방식

  1. 미리 크기가 46(입력값의 최대값 + 1)크기의 리스트 생성
  2. 인덱스 1, 2위치에 1로 초기화
  3. 3부터 n+1까지 for문을 돌면서 피보나치 수 구하기

2. 10844(쉬운 계단 수)

🔵 코드

n = int(input())

mlist = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]

for _ in range(1, n):
    newMlist = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    for i in range(10):
        if(i == 0):
            newMlist[i] = mlist[1]
        elif(i == 9):
            newMlist[i] = mlist[8]
        else:
            newMlist[i] = mlist[i-1] + mlist[i+1]

    mlist = newMlist

print(sum(mlist) % 1000000000)

🔵 풀이 방식

  1. [0, 1, 1, 1, 1, 1, 1, 1, 1, 1] 리스트 선언(n이 1일 때)
  2. n이 2부터는 0, 9인덱스는 각각 1, 8인덱스의 값을 가져오고, 1~8인덱스는 자기 자신의 -1, +1인덱스의 값을 더해서 갱신
    (ex. 1이면 0, 2인덱스의 값을 더해서 갱신)
  3. 이 과정을 n-1번 반복하여 sum(mlist) % 1000000000으로 결과 리턴

3. 11057(오르막 수)

🔵 코드

n = int(input())

mlist = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

for _ in range(1, n):
    for i in range(10):
        mlist[i] = sum(mlist[i:10])

print(sum(mlist) % 10007)

🔵 풀이 방식

  1. [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 리스트 선언(n이 1일 때)
  2. 값을 갱신할 때는 현재값부터 마지막값의 합으로 갱신
  3. 이 과정을 n-1번 반복하여 sum(mlist) % 10007으로 결과 리턴

4. 2193(이친수)

🔵 코드

n = int(input())

mlist = [0] * 91
mlist[1] = 1

for i in range(2, n+1):
    mlist[i] = mlist[i-2] + mlist[i-1]
   
print(mlist[n])

🔵 풀이 방식

  1. 피보나치 수와 같은 방식
  2. 입력값의 최대값인 91 크기의 리스트 생성
  3. 피보나치 수를 구하는 과정을 통해 n번째 값 리턴

0개의 댓글