- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/134239
스스로 푼 문제다!
문제 이해
처음에는 ranges의 원소가 이해가지 않았는데, [a,b]형태라면 범위는 [a, 마지막 인덱스 + b] (b는 0이하인 정수이므로 더한다)인 것이다. 그래서 [a, 마지막 인덱스 + b]에 해당하는 넓이를 구하면 된다.
풀이 이해
- 우박수열(sequence) 구한다. i 인덱스에 해당하는 값이 i번째 수열의 값이다.
- 마지막 x 좌표는 마지막 인덱스 값이므로 last = len(sequence) - 1 해준다.
- ranges 원소를 탐색하면서 시작과 끝이
- 유효한 경우(end > start) 해당 범위의 넓이(사다리꼴)를 구해서 answer에 추가한다.
- 유효하지 않은 경우(end < start)는 -1을 answer에 추가한다.
- end == start인 경우 넓이는 존재하지 않으므로 0을 answer에 추가한다.
- 정답 풀이 :
각 구간에 해당하는 넓이를 각각 따로 계산해서 answer에 추가하니 정답이 떴다!
def get_area(a, b, sequence):
# 높이가 1인 사다리꼴의 넓이
return (sequence[a] + sequence[b]) / 2
def solution(k, ranges):
K = k
sequence = [k]
while K != 1:
if K % 2 == 0:
K //= 2
else:
K = K * 3 + 1
sequence.append(K)
last = len(sequence) - 1
answer = []
for each in ranges:
start, offset = each
end = last + offset
if end < start:
answer.append(-1.0)
if end == start:
answer.append(0.0)
if end > start:
temp = 0
for i in range(start, end):
temp += get_area(i, i + 1, sequence)
answer.append(temp)
return answer
- 시도해본 풀이 :
이 풀이로는 10퍼센트만 맞혔는데, 각 단위 구간에 해당하는 넓이를 areas에 저장한 뒤 start, end가 유효할 때 areas의 start부터 end까지의 합을 구하려했다. 이렇게 구하면 원하는 값이 안 나오는 것 같다.
def get_area(a, b, sequence):
# 높이가 1인 사다리꼴의 넓이
return (sequence[a] + sequence[b]) / 2
def solution(k, ranges):
K = k
sequence = [k]
while K != 1:
if K % 2 == 0:
K //= 2
else:
K = K * 3 + 1
sequence.append(K)
last = len(sequence) - 1
areas = [0]
for i in range(1, last + 1):
areas.append(get_area(i - 1, i, sequence))
answer = []
for each in ranges:
start, offset = each
end = last + offset
if 0 <= start <= last and 0 <= end <= last:
if end < start:
answer.append(-1)
if end == start:
answer.append(0)
if end > start:
answer.append(sum(areas[start : end + 1]))
else:
answer.append(-1)
return answer
'프로그래머스 > Level 2' 카테고리의 다른 글
[연습문제 / 프로그래머스] 135807번 : 숫자 카드 나누기 (0) | 2022.11.14 |
---|---|
[연습문제 / 프로그래머스] 131130번 : 혼자 놀기의 달인 (0) | 2022.11.13 |
[연습문제 / 프로그래머스] 131704번 : 택배 상자 (0) | 2022.11.09 |
[위클리 챌린지 / 프로그래머스] 87377번 : 교점에 별 만들기 (0) | 2022.11.09 |
[kakao / 프로그래머스] 92342번 : 양궁대회 (0) | 2022.11.04 |