https://school.programmers.co.kr/learn/courses/30/lessons/134239
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제가 길어서 잘 읽어야한다.
과정을 정리하자면
1. 우박수열을 계산
2. 우박수열에 해당하는 값에 따른 각각의 넓이 계산
3. 주어진 범위에 따른 넓이의 합으로 정적분 계산
조건 : 시작값이 끝점보다 커서 유효하지 않은 구간인지 검사
나는 여기서 우박수열이 수행된 횟수만큼만 넓이를 계산하고 계산을 정적분 범위도 이 값을 통해 계산해주었다.
#include <string>
#include <vector>
using namespace std;
vector<double> solution(int k, vector<vector<int>> ranges) {
vector<double> answer;
vector<double> tmp;
vector<double> sum;
int n=k;
int cnt=0; //우박수열이 수행된 횟수
tmp.push_back(n);
//우박수열 계산
while (n != 1) {
if (n % 2 == 0) {
n /= 2;
cnt++;
} else {
n = n * 3 + 1;
cnt++;
}
if(n<1){
break;
}else{
tmp.push_back(n);
}
}
//각가의 넓이 계산
for(int i=0;i<cnt;i++){
sum.push_back((tmp[i]+tmp[i+1])/2);
}
//정적분 계산
for(int i=0;i<ranges.size();i++){
double tmpsum=0;
if(ranges[i][0]<=cnt+ranges[i][1]){
for(int j=ranges[i][0];j<cnt+ranges[i][1];j++){
tmpsum+=sum[j];
}
answer.push_back(tmpsum);
}else{
answer.push_back(-1);
}
}
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][LV2][C++]과제 진행하기 (0) | 2024.06.26 |
---|---|
[프로그래머스][LV2][C++]점 찍기 (0) | 2024.06.24 |
[프로그래머스][LV2][C++]광물 캐기 (0) | 2024.06.20 |
[프로그래머스][LV2][C++]멀쩡한 사각형 (0) | 2024.06.19 |
[프로그래머스][LV2][C++]문자열 압축 (0) | 2024.06.18 |