[codeup] 2625 : 삼각화단 만들기 (Small)

SUNGJIN KIM·2022년 7월 17일
0

CODEUP

목록 보기
60/76
post-thumbnail

문제

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

예를 들어, 만들고자 하는 화단 둘레의 길이가 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)
profile
#QA #woonmong

0개의 댓글