728x90
반응형
문제 1. 소수찾기
#include<iostream>
typedef unsigned long long ll;
using namespace std;
int is_prime_number_custom(ll input)
{
if (input < 2) {
return 0;
}
for (ll j = 2; j <= (ll)(input / j); j++)
{
if (input % j == 0)
{
return 0;
}
}
return 1;
}
int main() {
int a, cnt=0;
cin >> a;
int* arr = new int[a];
for (int i = 0; i < a; i++) {
cin >> arr[i];
if (is_prime_number_custom(arr[i])) {
cnt++;
}
}
cout << cnt;
return 0;
}
문제 2. 소수
#include<iostream>
typedef unsigned long long ll;
using namespace std;
int is_prime_number_custom(ll input)
{
if (input < 2) {
return 0;
}
for (ll j = 2; j <= (ll)(input / j); j++)
{
if (input % j == 0)
{
return 0;
}
}
return 1;
}
int main() {
int a, b, min, sum = 0;
cin >> a >> b;
for (int i = a; i <= b; i++) {
if (is_prime_number_custom(i)) {
if (sum == 0) min = i;
sum+=i;
}
}
if (sum == 0) cout << -1 << endl;
else {
cout << sum << endl;
cout << min;
}
return 0;
}
문제 3. 소인수분해
#include<iostream>
using namespace std;
void func_11653_Factorization(int a) {
bool is_flag = true;
for (int i = 2; i < a; i++) {
if (a % i == 0) {
is_flag = false;
cout << i << endl;
func_11653_Factorization(a / i);
break;
}
}
if(is_flag) cout << a << endl;
}
int main() {
int a;
cin >> a;
if (a != 1) {
func_11653_Factorization(a);
}
return 0;
}
문제 4. 소수 구하기
#include<stdio.h>
#include<math.h>
typedef unsigned long long ll;
int is_prime_number_custom(ll input)
{
if (input < 2) {
return 0;
}
for (ll j = 2; j <= (ll)(input / j); j++)
{
if (input % j == 0)
{
return 0;
}
}
return 1;
}
int main() {
int int_M, int_N;
scanf("%d %d", &int_M, &int_N);
for(int i = int_M; i <= int_N; i++)
{
if(is_prime_number_custom(i)){
printf("%d\n", i);
}
}
return 0;
}
문제 5. 베르트랑 공준
#include<iostream>
#include <cstring>
using namespace std;
bool *Sieve_of_Eratosthenes(int m) {
bool* arr = new bool[m + 1];
memset(arr, 1, sizeof(bool) * (m+1));
arr[0] = false;
arr[0] = false;
for (int i = 2; i < m + 1; i++) {
if (arr[i] == true) {
for (int j = i * 2; j < m + 1; j += i) {
arr[j] = false;
}
}
}
return arr;
}
int main() {
int int_N, cnt;
bool* arr = Sieve_of_Eratosthenes(123456 * 2);
do {
cin >> int_N;
cnt = 0;
for (int i = int_N + 1; i <= int_N*2; i++)
{
if (arr[i]) {
cnt++;
}
}
if(int_N != 0) cout << cnt << endl;
} while (int_N != 0);
return 0;
}
문제 6. 골드바흐의 추측
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
bool *Sieve_of_Eratosthenes(int m) {
bool* arr = new bool[m + 1];
memset(arr, 1, sizeof(bool) * (m+1));
arr[0] = false;
arr[0] = false;
for (int i = 2; i < m + 1; i++) {
if (arr[i] == true) {
for (int j = i * 2; j < m + 1; j += i) {
arr[j] = false;
}
}
}
return arr;
}
int main() {
int int_a, int_N, int_sum;
bool* arr = Sieve_of_Eratosthenes(20000);
int tmp_a, tmp_b, tmp_min;
vector<int> v;
cin >> int_a;
for (int i = 0; i < int_a; i++) {
cin >> int_N;
int_sum = 0;
v.clear();
for (int j = 2; j < int_N; j++) {
if (arr[j]) {
v.push_back(j);
}
}
tmp_a = 0;
tmp_b = 0;
tmp_min = int_N;
for (int j = 0; j < v.size(); j++) {
for (int k = 0; k < v.size(); k++) {
if (int_N == v.at(j) + v.at(k) && tmp_min > abs(v.at(j) - v.at(k))) {
tmp_a = v.at(j);
tmp_b = v.at(k);
tmp_min = abs(v.at(j) - v.at(k));
}
}
}
if (tmp_a + tmp_b != 0) cout << tmp_a << " " << tmp_b << endl;
}
return 0;
}
문제 7. 직사각형에서 탈출
#include<iostream>
using namespace std;
int main() {
int x, y, w, h, min;
cin >> x;
min = x;
cin >> y;
if (min > y) min = y;
cin >> w;
if (min > w-x) min = w-x;
cin >> h;
if (min > h - y) min = h - y;
cout << min;
return 0;
}
문제 8. 네 번째 점
#include<iostream>
#include<map>
using namespace std;
int main() {
int a, b;
map<int, int> x, y;
map<int, int>::iterator iter;
for (int i = 0; i < 3; i++) {
cin >> a >> b;
if (x.count(a)) x[a]++;
else x[a] = 1;
if (y.count(b)) y[b]++;
else y[b]=1;
}
for (iter = x.begin(); iter != x.end(); iter++) {
if (iter->second == 1) {
cout << iter->first << " ";
}
}
for (iter = y.begin(); iter != y.end(); iter++) {
if (iter->second == 1) {
cout << iter->first;
}
}
return 0;
}
문제 9. 직각삼각형
#include<iostream>
#include<cmath>
using namespace std;
int main() {
int a, b, c;
int pow_a, pow_b, pow_c, pow_sum;
while (1) {
cin >> a >> b >> c;
pow_a = pow(a, 2);
pow_b = pow(b, 2);
pow_c = pow(c, 2);
pow_sum = pow_a + pow_b + pow_c;
if (pow_sum == 0)
break;
if (pow_a == pow_sum - pow_a || pow_b == pow_sum - pow_b || pow_c == pow_sum - pow_c) {
cout << "right" << endl;
}
else {
cout << "wrong" << endl;
}
}
return 0;
}
문제 10. 택시 기하학
#include<iostream>
#include<cmath>
using namespace std;
double const_pi() {
return atan(1) * 4;
}
int main() {
int r;
cin >> r;
// 유클리드 기하학에서의 원의 넓이
printf("%.6f\n", const_pi() * pow(r, 2));
// 택시 기하학 에서의 넓이 : 대각선 길이가 2*r인 마름모의 넓이
printf("%.6f\n", pow(2 * r, 2) / 2);
return 0;
}
문제 11. 터렛
#include<iostream>
#include<cmath>
using namespace std;
int main() {
int a;
cin >> a;
int x1, y1, r1, x2, y2, r2;
double len;
for (int i = 0; i < a; i++) {
cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
// 두 점 사이의 거리
len = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
// 반경이 완벽하게 겹치면 무한대의 경우
if (len == 0 && r1 - r2 == 0) {
cout << -1 << endl;
continue;
}
// 시작점은 같은데 반경이 달라 만날 수 없음
if (len == 0 && r1 - r2 != 0) {
cout << 0 << endl;
continue;
}
// 삼각형이 성립되면 2개, 일치하면 1개, 안되면 0개
if (len < r1 + r2 && r1 < r2 + len && r2 < len + r1) {
cout << 2 << endl;
}
else if (len == r1 + r2 || r1 == len + r2 || r2 == len + r1) {
cout << 1 << endl;
}
else {
cout << 0 << endl;
}
}
return 0;
}
결과
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 단계별로 풀어보기 > 브루트포스 (c++) (0) | 2022.01.26 |
---|---|
[백준] 15965번 - K번째 소수 (실버 2) (0) | 2022.01.25 |
[백준] 단계별로 풀어보기 > 재귀 (c++) (0) | 2022.01.25 |
[백준] 단계별로 풀어보기 > 기본 수학 1 (c++) (0) | 2022.01.18 |
[백준] 단계별로 풀어보기 > 문자열 (c++) (0) | 2022.01.15 |
[백준] 단계별로 풀어보기 > 함수 (c++) (0) | 2022.01.14 |
댓글