알고리즘/SWEA

[D3] 정삼각형 분할 놀이 - 3233 (python)

KimMinGyun 2024. 6. 25. 04:19

문제 링크

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

한 변의 길이가 A인 정삼각형의 내부를 한 변의 길이가 B인 정삼각형으로 나누려고 한다.

이 때 필요한 한 변의 길이가 B인 정삼각형의 최소 개수를 구하는 프로그램을 작성하라.

B는 A의 약수이다.



A = 2, B = 1 일 때의 한 변의 길이가 B인 정삼각형의 최소 개수는 아래 그림과 같다.

 
[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스마다 첫 번째 줄에 두 자연수 A, B(1 ≤ B ≤ A ≤ 106,  B|A)가 주어진다.


[출력]
각 테스트 케이스마다 몇 개의 삼각형이 필요한지 출력하라.

 

 

코드

 

1. 정삼각형의 면적 계산

 

def extent(x):
    return 3**2/1/4*x**2

for t in range(1, int(input())+1):
    print(f'#{t}', end=' ')
    a, b = map(int, input().split())
    print(int(extent(a)//extent(b)))

 

정삼각형의 면적은 

 

필요한 최소 개수 N은 다음과 같습니다.

 

 

2. 정삼각형 분할 방법

for t in range(1, int(input())+1):
    print(f'#{t}', end=' ')
    a, b = map(int, input().split())
    ans = 0
    for i in range(a//b):
        ans += i*2 + 1
    print(ans)

 

예를 들어, 한 변의 길이가 A = 3이고, B = 1일 때

큰 정삼각형의 한 변에 작은 정삼각형이 몇 개 들어가는지 계산하면, A/B=3 

따라서, i는 0부터 2까지 반복

 

반복문 내에서 i * 2 + 1은 다음과 같은 값을 갖습니다:

  • i = 0일 때: 0 * 2 + 1 = 1
  • i = 1일 때: 1 * 2 + 1 = 3
  • i = 2일 때: 2 * 2 + 1 = 5

각각의 값을 더하면 1 + 3 + 5 = 9

이것은 실제로 큰 정삼각형을 작은 정삼각형으로 나누는 데 필요한 최소 개수와 일치합니다.