
소스코드
N,X = map(int,input().split())
bur = [1] * 51            
pat = [1] * 51
for i in range(1, N+1):
    bur[i] = 2 * bur[i-1] + 3
    pat[i] = 2 * pat[i-1] + 1 
def eat(n, x):        
    if n == 0:
        return x
    if x == 1:
        return 0
    elif x <= 1 + bur[n-1]:   
        return eat(n-1, x-1)  
    elif x == 1 + bur[n-1] + 1:
        return pat[n-1] + 1
    elif x <= bur[n-1] + bur[n-1] + 1 + 1:  
        return pat[n-1] + 1 + eat(n-1, (x-(bur[n-1]+2)))
    else:                     
        return pat[n]
print(eat(N, X))
알고리즘
처음에 문제에서 제시한대로 문자열을 가지고 인덱싱을 이용하여 풀었는데 메모리 초과가 났다.
그래서 다른 사람의 풀이를 참고했는데 갯수를 가지고 조건에 따라 경우를 나누어 재귀를 이용하여 풀었다.
'Coding test' 카테고리의 다른 글
| [백준/17427/파이썬] 약수의 합2 (0) | 2023.02.14 | 
|---|---|
| [백준/4375/파이썬] 1 (1) | 2023.02.13 | 
| [백준/2003/파이썬] 수들의 합2 - brute force (0) | 2023.02.11 | 
| [백준/1309/파이썬] 동물원 - DP (1) | 2023.02.10 | 
| [백준/14889/파이썬] 스타트와 링크 (1) | 2023.02.07 |