프로그래머스/2레벨

숫자 블럭/C++

Koalitsiya 2023. 2. 8. 17:52
 

프로그래머스

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

programmers.co.kr

문제 이해

  • 문제에서 블록 번호에 따른 숫자 블록은 블록 번호의 가장 큰 약수이다.
  • 10000000의 구간마다 0, 1, 1, 2, 1...의 규칙이 반복된다.

풀이방법

1-1. begin이 1이라면 answer에 0을 담고 continue

1-2. 약수를 체크해서 나머지가 0이고 몫이 10000000이하라면 i / j를 answer에 담고 flag = true를 해준 뒤 break

1-3. flag가 false라면 해당 번호는 소수이므로 1을 answer에 담는다

2. 위를 begin부터 end까지 반복 

#include <string>
#include <vector>

using namespace std;

vector<int> solution(long long begin, long long end) {
    vector<int> answer;
    
    for(int i = begin; i <= end; i++) {
        bool flag = false;
        if(i == 1) {
            answer.push_back(0);
            continue;
        }
        
        for(int j = 2; j*j <= i; j++) {
            if(!(i % j) && (i / j <= 10000000)) {
                answer.push_back(i / j);
                flag = true;
                break;
            }
        }
        
        if(!flag) answer.push_back(1);
    }
    
    return answer;
}