백준 16974번 레벨 햄버거

8359 단어 백준백준

문제출처 : https://www.acmicpc.net/submit/16974/33676179

풀이과정

1. 문제를 읽고 재귀함수 사용이란걸 알았으나, 직접 문자열을 만드는 방식으로 풀이를 진행하다보니, 시간,메모리 등등 이렇게 해서는 안된다는 걸 알게 되었다.

2. burger, patty 배열을 만들어 각 레벨 버거의 총 레이어 수와 패티 수를 저장해주었다.

3. 기저조건을 설정해주었다.

4. 재귀가 쓰이는 부분이다.(case1,case2,case3,case4)

n, x = map(int,input().split())

burger = [1] *(n+1)
patty = [1]*(n+1)

for i in range(1,n+1):
    burger[i] = 1+burger[i-1]+1+burger[i-1]+1 # burger[i] = B + burger[n-1] + P + burger[n-1] + B
    patty[i] = patty[i-1] + 1 + patty[i-1] #  patty[i] = patty[n-1] + P + patty[n-1]

# burger, patty 초기화 해주기

def solve(n, x):
    if n == 0:
        if x == 0:
            return 0
        elif x == 1:
            return 1
    elif x == 1:
        return 0
# 기저 조건 설정
    elif x <= 1+burger[n-1]: # case 1
        return solve(n-1,x-1)
    elif x == 1+burger[n-1]+1: # case 2
        return patty[n-1] + 1
    elif x <= 1+burger[n-1] + 1 + burger[n-1]: # case 3
        return patty[n-1] + 1 + solve(n-1, x - (1+burger[n-1]+1))
    else: # case 4
        return patty[n]

print(solve(n,x))

좋은 웹페이지 즐겨찾기