프로그래머스/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;
}