주어진 화단 둘레의 길이를 이용하여 삼각형 모양의 화단을 만들려고 한다. 이 때 만들어진 삼각형 화단 둘레의 길이는 반드시 주어진 화단 둘레의 길이와 같아야 한다. 또한, 화단 둘레의 길이와 각 변의 길이는 자연수이다.
예를 들어, 만들고자 하는 화단 둘레의 길이가 9m라고 하면
한 변의 길이가 1m, 두 변의 길이가 4m인 화단,
한 변의 길이가 2m, 다른 변의 길이가 3m, 나머지 변의 길이가 4m인 화단,
세 변의 길이가 모두 3m인 3가지 경우의 화단을 만들 수 있다.
화단의 길이 이 주어진다.(단, 3 <= n <= 100)
9
n으로 만들 수 있는 서로 다른 화단의 수를 출력한다.
3
삼각형을 만드는 조건을 먼저 생각해보면 문제는 간단하게 풀린다.
삼각형을 만드는 조건
1) 모든 변은 자연수여야 한다.
2) 가장 긴 변의 자연수 < 두 변의 길이의 합
3) 삼각형은 합동이여야 한다.
이 조건 그대로 a,b,c 중 a를 가장 긴 변으로 두고 코드를 작성하였다.
마지막 2차원 배열에서 중복된 값이 들어가는 경우가 있어서 중복도 없애주었다.
n = int(input())
triangle_array = []
for a in range(n,0,-1):
if n-a > a:
for b in range(n-a,0,-1):
c = n-a-b
if c != 0 and a >= b and a >= c:
triangle_array.append([a,b,c])
triangle_array = set([tuple(sorted(item)) for item in triangle_array])
print(len(triangle_array))
생각보다 시간이 많이 걸리지 않아서 다행이다.
성장한 느낌 쑥쑥
(+) 7월 31일 내용 추가
2차원 배열 중복을 제거할 필요 없이 a >= b >= c 조건을 추가해주면 된다.
또한 개수만 구하면 되는 것으로 배열을 직접 구하지 않고 count해주기만 하면 된다.
n = int(input())
triangle_array = []
count = 0
for a in range(n,0,-1):
if n-a > a:
for b in range(n-a,0,-1):
c = n-a-b
if c != 0 and a >= b and b >= c:
count += 1
print(count)