-
프로그래머스 우박수열 정적분 python코딩 테스트 2023. 2. 13. 16:53
https://school.programmers.co.kr/learn/courses/30/lessons/134239#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
우박수열로 만든 꺾은선 그래프의 일정 구간 넓이를 구하는 문제이다.
코드
import itertools def solution(k, ranges): answer = [] sum=[0] while k!=1: if k%2==0: next_k=k/2 sum.append(next_k*1.5) else: next_k=k*3+1 sum.append(k+(next_k-k)*0.5) k=next_k area=list(itertools.accumulate(sum)) for start, end in ranges: end_index=len(area)+end-1 if start>end_index: answer.append(-1) else: answer.append(area[end_index]-area[start]) return answer
범위가 A~B인 그래프의 넓이를 구할 때, 0~B범위의 넓이 - 0~A범위의 넓이인 점을 이용해서 풀었다. (여기서 범위는 x축)
배열 area는 구간마다 넓이를 따로 구한 배열 sum을 누산한 것이다.
itertools 라이브러리의 accumulate()를 이용해서 area를 만들었다.
처음엔 범위마다 따로 넓이를 구하는 방식으로 짜다가 비효율적이여서 이러한 방식으로 짜게 되었다. 짜기 전에 더 효율적인 방법은 없을까 생각하는 과정이 더 필요한 것 같다.
'코딩 테스트' 카테고리의 다른 글
백준 24444번: 알고리즘 수업 - 너비 우선 탐색 1 (Python) (0) 2023.02.17 백준 11729번: 하노이 탑 이동 순서 (0) 2023.02.09 백준 1911번: 흙길 보수하기(Python) (0) 2023.02.08 프로그래머스 개인정보 수집 유효기간(2023 KAKAO BLIND RECRUITMENT) Python (0) 2023.02.07 백준 2751번: 수 정렬하기 2(Python) (0) 2023.02.06