알고리즘/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
이것은 실제로 큰 정삼각형을 작은 정삼각형으로 나누는 데 필요한 최소 개수와 일치합니다.