프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

조건

 

조건 수행 중 나오는 k 값을 그래프로 나타낸 것

 

  • 주어지는 k 값으로 콜라츠 추측 수행
  • 이후 만들어지는 그래프에서 주어진 범위만큼 넓이를 구하면 됨

> 설명이 많긴한데 그냥 주어진 조건 수행 후 만들어지는 그래프에서 주어지는 각 범위마다 넓이를 구하면 됨

 

#include <string>
#include <vector>

using namespace std;

vector<double> solution(int k, vector<vector<int>> ranges) {
    vector<double> answer;
    vector<int> hail;
    
    hail.push_back(k);
    
    // 결과가 1보다 크면 작업 반복
    while(k != 1) {
    	// 입력된 수가 짝수라면 2로 나눔
        if(k % 2 == 0) k /= 2;
        // 입력된 수가 홀수라면 3을 곱하고 1을 더함
        else k = (k * 3) + 1;
        
        // 각 작업마다 나오는 값 저장
        hail.push_back(k);
    }
    
    for(int i = 0; i < ranges.size(); i++) {
    	// 주어진 범위의 시작점
        int start = ranges[i][0];
        // 주어진 범위의 끝점
        int end = hail.size() - 1 + ranges[i][1];
        double tmp = 0;
        
        // 주어진 범위의 너비 계산
        for(int j = start; j < end; j++)
            tmp += (double)(hail[j] + hail[j + 1]) / 2;
        
        // 시작점이 끝점보다 크다면 결과는 -1
        if(start > end) answer.push_back(-1.0);
        else answer.push_back(tmp);
    }
    
    return answer;
}

 

+ Recent posts