반응형
문제 설명
제한사항
입출력 예
Solution.py
초항 K가 5일 때 콜라츠 추측으로 계산하면 다음과 같은 수열이 나옵니다. [5, 16, 8, 4, 2, 1]
나온 수열 대로 그래프를 그려보면 아래와 같은 그림이 나옵니다.
여기서 각 꼭지점마다 선을 그어서 사다리꼴 사각형을 만들 수 있습니다.
여기서 기억나지 않는 사람들 위해 사다리꼴 사각형이란 무엇인지에 대해 설명하자면
평행한 변이 있는 사각형, 즉 마주 보는 한 쌍의 변이 서로 평행한 사각형을사다리꼴이라고 합니다.
이제 문제의 답을 구하기 위한 각 구간의 넓이를 구해야하는데
그림을 보면 사다리꼴 넓이로 구간의 넓이를 구할 수 있어 보입니다.
각 사다리골 사각형들의 넓이를 구해 구간의 넓이를 구해 봅시다.
사다리꼴 넓이는 ((윗변+아랫변) * 높이) / 2 공식으로 구할 수 있습니다.
아래 그림을 참고하면 이 문제에 대해 쉽게 이해할 수 있을 겁니다.
정답 코드
def getUbak(k):
result = []
while k != 1:
result.append(k)
# 결과가 소수이므로 / 연산
k = k / 2 if k % 2 == 0 else k * 3 + 1
result.append(k)
return result
def solution(k, ranges):
answer = []
ubak = getUbak(k)
for r in ranges:
total = 0
ubakRange = ubak[r[0] : len(ubak)+r[1]]
# 주어진 구간의 시작점이 끝점보다 커서 유효하지 않은 구간
if r[0] >= r[1] + len(ubak):
answer.append(-1)
continue
for i in range(len(ubakRange) - 1):
# 사다리꼴 넓이 구하는 공식 : ((윗변+아랫변) * 높이) / 2
total += (((ubakRange[i] + ubakRange[i+1]) * 1) / 2)
answer.append(total)
return answer
'◼ 코딩테스트 > 구현 (Implementation)' 카테고리의 다른 글
[Python/파이썬] 프로그래머스 Lv1 - 바탕화면 정리 (0) | 2023.04.14 |
---|---|
[Python/파이썬] 프로그래머스 Lv1 - 달리기 경주 (0) | 2023.04.11 |
[Python/파이썬] 프로그래머스 Lv2 - 숫자 나누기 (유클리드호제법) (0) | 2023.04.04 |
[Python/파이썬] 프로그래머스 Lv2 - 줄 서는 방법 (2) | 2023.03.13 |
[Python/파이썬] 프로그래머스 Lv2 - 수식 최대화 (카카오 인턴쉽) (0) | 2023.03.10 |