# n = int(input())
# t = [0 for i in range(36)]
# t[0] = 1
# t[1] = 1
# t[2] = 2
# t[3] = 5
#
# if n > 3:
# for i in range(4, n + 1):
# for j in range(i):
# t[i] += t[j] * t[i - j - 1]
# print(t[n])
# data = []
# n = int(input())
# arr = list(map(int, input().split()))
# maxdp = arr
# mindp = arr
# for i in range(n-1):
# arr = list(map(int, input().split()))
# maxdp = [arr[0] + max(maxdp[0], maxdp[1]), arr[1] + max(maxdp), arr[2] + max(maxdp[1], maxdp[2])]
# mindp = [arr[0] + min(mindp[0], mindp[1]), arr[1] + min(mindp), arr[2] + min(mindp[1], mindp[2])]
# print(max(maxdp), min(mindp))
#캡틴 이다솜
data = [1]
sigma = 0
plus = 3
n = int(input())
for i in range(300001):
if data[i] >= n:
break
data.append(data[i] + plus)
plus += (3+i)
dp = [3000000]*(n+1)
for i in range(1, n + 1):
for sigma in data:
if sigma == i:
dp[i] = 1
break
elif sigma > i:
break
dp[i] = min(dp[i], 1 + dp[i - sigma])
print(dp[n])