문제

주어진 화단 둘레의 길이를 이용하여 삼각형 모양의 화단을 만들려고 한다. 이 때 만들어진 삼각형 화단 둘레의 길이는 반드시 주어진 화단 둘레의 길이와 같아야 한 다. 또한, 화단 둘레의 길이와 각 변의 길이는 자연수이다. 예를 들어, 만들고자 하는 화단 둘레의 길이가 9m라고 하면,

• 한 변의 길이가 1m, 두 변의 길이가 4m인 화단
• 한 변의 길이가 2m, 다른 변의 길이가 3m, 나머지 변의 길이가 4m인 화단 • 세 변의 길이가 모두 3m인 3가지 경우의 화단을 만들 수 있다.

화단 둘레의 길이를 입력받아서 만들 수 있는 서로 다른 화단의 수를 구하는 프로 그램을 작성하시오.

입력

화단의 길이 n이 주어진다.(단, 1 <= n <= 100)

출력

출력내용은 입력받은 n으로 만들 수 있는 서로 다른 화단의 수를 출력한다.

예제 1 입력

9

예제 1 출력

3

Source (O(N^3))

n = int(input())
count = 0

for i in range(1, n):
    for j in range(i, n):
        for k in range(j, n):
            if((i + j + k) == n and k < i + j):
                count += 1

print(count)

Source (O(N^2))

n = int(input())
count = 0

for i in range(1, n):
    for j in range(i, n):
        k = n - i - j
        if(k < i + j and k >= j):
            count += 1

print(count)

Source (O(N))

n = int(input())
count = 0

for i in range(1, n):
	count += max(0, int((n-i)/2) - max(i, int(n/2) - i + 1) + 1)

print(count)

O(N)에 대한 풀이가 왜 저렇게 나왔는지는 좀 더 고민해보도록 하자 😢