백준 2581번 - 소수

윤여준·2022년 5월 16일
0

백준 풀이

목록 보기
7/35
post-thumbnail

문제

문제 링크 : https://www.acmicpc.net/problem/2581

풀이

vector STL을 사용해서 문제를 풀었다.

우선 m부터 n까지의 정수를 벡터 v1에 넣어준다.

벡터 v2를 선언해주고, 2부터 m-1까지의 정수를 넣어준다.

v1의 첫 원소부터 마지막 원소까지 돌면서, v1의 원소가 v2의 원소의 배수인지 확인한다.

만약 v1의 원소가 1이면 1은 소수가 아니므로 다음 원소로 넘어간다.

만약 배수가 아니라면 v1에 그대로 남겨두고 v2의 끝에 그 수를 추가해준다. 그리고 변수 sum에 해당 원소를 더해준다. 또한 변수 min의 값이 초기화시켰던 값인 -1이면 해당 원소를 min에 대입해준다.

만약 배수가 맞다면 다음 원소로 넘어간다.

이 과정을 진행하면 sum에는 v1의 원소들 중 소수들의 합이 담겨 있게 되고, min에는 v1의 원소들 중 가장 작은 소수가 담겨 있게 된다.

만약 v1에 소수가 하나도 없다면 sum 은 0이 되게 되므로 -1을 출력한다. sum이 0이 아니라면 sum과 min을 순서대로 출력한다.

#include <iostream>
#include <vector>
using namespace std;

int main() {
	int m, n;

	cin >> m;
	cin >> n;

	vector<int> v1;
	vector<int> v2;

	int sum = 0;
	int min = -1;

	for (int i = m; i <= n; i++) {
		v1.push_back(i);
	}

	for (int i = 2; i < m; i++) {
		v2.push_back(i);
	}

	for (int i = 0; i < v1.size(); i++) {
		if (v1[i] == 1) {
			continue;
		}
		bool primeNum = true;
		for (int num : v2) {
			if (v1[i] % num == 0) {
				primeNum = false;
				break;
			}
		}
		if (primeNum == true) {
			if (min == -1) {
				min = v1[i];
			}
			sum += v1[i];
			v2.push_back(v1[i]);
		}
	}

	if (sum == 0) {
		cout << -1 << '\n';
	}
	else {
		cout << sum << '\n';
		cout << min << '\n';
	}

	return 0;
}
profile
Junior Backend Engineer

0개의 댓글