[프로그래머스] 레벨2 우박수열 정적분
https://school.programmers.co.kr/learn/courses/30/lessons/134239
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
사실 이 문제를 풀면서 사다리꼴의 넓이를 어떻게 구하는 지 까먹어서 공식을 구글링했다. 정적분이라는 단어가 어려워보여서 그렇지 결국 그냥 점과 점 사이를 이은 선분을 기준으로 아래의 영역 넓이를 전부 구하는 것이다.
전체적인 문제 난이도는 그렇게 어렵진 않았으며, 문제를 풀고나서 생각해보니 이중 반복문을 쓰지말고 계속해서 누적합을 구하는 방식으로 풀어도 됐을 것 같다.
문제 및 입출력
제한사항 및 입출력 예제
코드
import java.util.ArrayList;
class Solution
{
public double[] solution(int k, int[][] ranges)
{
double[] answer = new double[ranges.length];
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(k);
while(k!=1)
{
if(k%2==0)
{
k /= 2;
}
else
{
k *= 3;
k++;
}
list.add(k);
}
double[] calc = new double[list.size()-1];
for(int i=0; i<list.size()-1; i++)
{
calc[i] = (double)(list.get(i)+list.get(i+1))/2;
}
for(int i=0; i<ranges.length; i++)
{
double result = 0;
int s = ranges[i][0];
int e = list.size()+ranges[i][1]-1;
if(s>e)
{
answer[i] = -1;
}
else
{
for(int j=s; j<e; j++)
{
result += calc[j];
}
answer[i] = result;
}
}
return answer;
}
}