- C++
1. 메모리 : 3728KB / 시간 : 832ms
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
#include <iostream>
#include <vector>
#include <algorithm>
#define max 100000
using namespace std;
vector<int> v;
bool pm[50001];
int main(void){
cin.tie(0); cout.tie(0);
ios_base ::sync_with_stdio(false);
int n; cin >> n;
// 소수 찾기
for (int i = 2; i * i <= max/2; i++){
if (!pm[i]){
for (int j = i * i; j <= max/2; j += i)
pm[j] = true;
}
}
for(int i=2; i<50000; i++){
for(int j=i+1; j<50000; j++){
if(i*j<=max+1 && pm[i]==false && pm[j]==false){
v.push_back(i*j);
}
}
}
sort(v.begin(), v.end());
// target 넘버 찾기
while (n--) {
int target;
cin >> target;
int start = 0, end = v.size(), mid = 0;
int ans = 0;
while (start <= end){
mid = (start + end) / 2;
if (v[mid] == target){
ans = target;
break;
} else if (target < v[mid]) {
end = mid - 1;
ans = v[mid];
} else{
start = mid + 1;
}
}
cout << ans << "\n";
}
return 0;
}
|
cs |
2. 메모리 : 3792kb / 시간 : 24ms
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#include <iostream>
#include <vector>
#include <algorithm>
#define max 100000
using namespace std;
vector<int> v;
vector<int> arr;
bool pm[50001];
int main(void){
cin.tie(0); cout.tie(0);
ios_base ::sync_with_stdio(false);
int n; cin >> n;
// 소수 찾기
for (int i = 2; i * i <= max/2; i++){
if (!pm[i]){
for (int j = i * i; j <= max/2; j += i)
pm[j] = true;
}
}
for(int i=2; i<=max/2; i++){
if(!pm[i]) arr.push_back(i);
}
for(int i=0; i<arr.size(); i++){
for(int j=i+1; j<arr.size(); j++){
if(arr[i]*arr[j]<=max+1) v.push_back(arr[i]*arr[j]);
}
}
sort(v.begin(), v.end());
// target 넘버 찾기
while (n--){
int target; cin >> target;
int start = 0, end = v.size()-1, mid = 0;
int ans = 0;
while (start <= end){
mid = (start + end) / 2;
if (v[mid] == target){
ans = target;
break;
} else if (target < v[mid]){
end = mid - 1;
ans = v[mid];
} else{
start = mid + 1;
}
}
cout << ans << "\n";
}
return 0;
}
|
cs |
- JAVA
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
public class Main{
static boolean[] pm = new boolean[50001];
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int tc = Integer.parseInt(br.readLine());
// 소수 찾기
for(int i=2; i*i<=50000; i++){
if(!pm[i]){
for(int j=i*i; j<=50000; j+=i)
pm[j]=true;
}
}
ArrayList<Integer> temp = new ArrayList<Integer>();
for(int i=2; i<=50000; i++){
if(pm[i]==false)
temp.add(i);
}
ArrayList<Integer> arr = new ArrayList<Integer>();
for(int i=0; i<temp.size(); i++){
for(int j=i+1; j<temp.size(); j++){
if(temp.get(i)*temp.get(j)<= 100001) {
arr.add(temp.get(i) * temp.get(j));
}
}
}
Collections.sort(arr);
StringBuilder sb = new StringBuilder();
// target 넘버 찾기
for(int i=0; i<tc; i++){
int target = Integer.parseInt(br.readLine());
int start=0, end=arr.size()-1, mid=0;
int ans=0;
while(start<=end){
mid = (start+end)/2;
if(arr.get(mid) == target){
ans = target;
break;
}
else if(target < arr.get(mid)){
end = mid-1;
ans = arr.get(mid);
} else {
start = mid+1;
}
}
sb.append(ans).append("\n");
}
System.out.print(sb);
}
}
|
cs |
'백준 2 > 그래프' 카테고리의 다른 글
| [백준 13168] 내일로 여행 (Java) (0) | 2020.12.24 |
|---|---|
| [백준 1920] 수 찾기 (Java) (0) | 2020.12.15 |
| [백준 4179] 불! (C++/Python) (0) | 2020.12.08 |
| [백준 1261] 알고스팟 (C++) (0) | 2020.12.08 |
| [백준 2206] 벽 부수고 이동하기 (C++/Python) (0) | 2020.12.08 |