반응형

www.acmicpc.net/problem/17425

 

17425번: 약수의 합

두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더

www.acmicpc.net

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
// https://rudruddl.tistory.com/m/524
#include <iostream>
using namespace std;
long long t, n, dp[1000001], sum[1000001];
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    /*
         1 ~ 1,000,000까지 미리 채워넣음
         1은 모든 숫자에 다 포함되기 때문에
         i = 2부터 실행하면 1,000,000번 만큼 수행 안해도 됨
     */
    dp[1= 1;
    for (int i = 2; i <= 1000000; i++) {
        // 나의 배수에게 나를 채워넣음
        for (int j = 1; i * j <= 1000000; j++) {
            dp[i * j] += i;
        }
        // 1은 직접 채워줌
        dp[i] += (dp[i - 1+ 1);
    }
 
    cin >> t;
    while (t--) {
        int ans = 0;
        cin >> n;
        cout << dp[n] << '\n';
    }
}
cs
반응형
반응형

www.acmicpc.net/problem/17427

 

17427번: 약수의 합 2

두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
/*
    약수가 아닌 배수 기준으로 생각
    n = 1,000,000
    2: 2 4 6 ... 999998 1000000        -> 2: 50만개 포함됨
    3: 3 6 9 ... 999996 999999        -> 3: 33만개 포함됨
    4: 4 8 12 ... 999996 1000000    -> 4: 25만개 포함됨
*/
int main() {
    long long n, ans = 0;
    cin >> n;
    for (int i = 1; i <= n; i++
        ans += (n / i)*i;
    
    cout << ans;
}
cs
반응형
반응형

www.acmicpc.net/problem/1037

 

1037번: 약수

첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되

www.acmicpc.net

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <algorithm>
using namespace std;
int n, arr[51];
int main() {
    cin >> n;
    for (int i = 0;i < n;i++)
        cin >> arr[i];
    sort(arr, arr + n);
    if (n == 1)
        cout << arr[0* arr[0];
    else
        cout << arr[0* arr[n - 1];
    
}
cs
반응형
반응형

www.acmicpc.net/problem/4375

 

4375번: 1

2와 5로 나누어 떨어지지 않는 정수 n(1 ≤ n ≤ 10000)가 주어졌을 때, 1로만 이루어진 n의 배수를 찾는 프로그램을 작성하시오.

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
long long n;
int main() {
    while (cin >> n) {    // while(!cin.eof()) 하면 틀림
        int ans = 1;
        long long div = 1;
        while (div % n != 0) {
            div = div * 10 + 1;
            div %= n;    // 여기가 핵심
                        // (x mod n) == ( (x mod n) mod n)
            ans++;
        }
        cout << ans << '\n';
    }
}
cs
반응형

'백준 > 그리디' 카테고리의 다른 글

백준 1202  (0) 2021.02.12
백준 11000  (0) 2021.02.05
백준 16953  (0) 2021.02.05
백준 2847  (0) 2021.02.05
백준 1439  (0) 2021.02.05
반응형

www.acmicpc.net/problem/1202

 

1202번: 보석 도둑

첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci

www.acmicpc.net

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
#include <iostream>
#include <algorithm>
#include <queue>
#define ll long long
#define rep(i,n) for(ll i=0;i<n;i++)
#define pii pair<ll, ll>
using namespace std;
ll n, k, idx, ans;
pii arr[300001];
ll bag[300001];
priority_queue<ll> q;
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> k;
    rep(i,n)
        cin >> arr[i].first >> arr[i].second;
    
    rep(i,k)
        cin >> bag[i];
 
    sort(arr, arr + n);
    sort(bag, bag + k);
 
    idx = 0;
    ans = 0;
    rep(i, k) {
        while (idx < n && arr[idx].first <= bag[i])
            q.push(arr[idx++].second);
        if (!q.empty()) {
            ans += q.top();
            q.pop();
 
        }
    }
    cout << ans;
}
cs
반응형

'백준 > 그리디' 카테고리의 다른 글

백준 4375  (0) 2021.02.12
백준 11000  (0) 2021.02.05
백준 16953  (0) 2021.02.05
백준 2847  (0) 2021.02.05
백준 1439  (0) 2021.02.05
반응형

www.acmicpc.net/problem/11000

 

11000번: 강의실 배정

첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (1 ≤ Si < Ti ≤ 109)

www.acmicpc.net

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
#include <iostream>
#include <algorithm>
#include <queue>
#define pii pair<intint>
using namespace std;
priority_queue<intvector<int>, greater<int> > pq;
int n;
pii arr[200001];
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    for (int i = 0;i < n;i++
        cin >> arr[i].first >> arr[i].second;
    sort(arr, arr+n);
    // 배열 -> 시작 시간 오름차순
    // pq -> 종료 시간 오름차순
    // pq의 개수 -> 강의실 개수
    pq.push(arr[0].second);
    for (int i = 1; i < n;i++) {
        if (arr[i].first >= pq.top())
            pq.pop();
        pq.push(arr[i].second);
    }
    cout << pq.size();
}
cs
반응형

'백준 > 그리디' 카테고리의 다른 글

백준 4375  (0) 2021.02.12
백준 1202  (0) 2021.02.12
백준 16953  (0) 2021.02.05
백준 2847  (0) 2021.02.05
백준 1439  (0) 2021.02.05
반응형

www.acmicpc.net/problem/16953

 

16953번: A → B

첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
int a, b, cnt, last;
int main() {
    cin >> a >> b;
    
    // 같으면 안됨 (b = -1 -> while 안들어감)
    if (a == b) 
        b = -1;
    
    // b == a 이거나 b < a 이면 벗어남
    while (b>a) {
        last = b % 10;
        // 마지막 숫자가 3, 5, 7, 9 될 수 없음
        if (last > 1 && last % 2 == 1break;
 
        // 마지막 숫자가 1이면 1 제거
        // 마지막 숫자가 2의 배수이면 2로 나눔
        last == 1 ? b /= 10 : b /= 2;
        cnt++;
    }
    cout << (b == a ? cnt + 1 : -1);
}
cs
반응형

'백준 > 그리디' 카테고리의 다른 글

백준 1202  (0) 2021.02.12
백준 11000  (0) 2021.02.05
백준 2847  (0) 2021.02.05
백준 1439  (0) 2021.02.05
백준 1449  (0) 2021.02.05
반응형

www.acmicpc.net/problem/2847

 

2847번: 게임을 만든 동준이

학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int n, ans, arr[101];
int main() {
    cin >> n;
    for (int i = 0;i < n;i++)
        cin >> arr[i];
    for (int i = n - 1; i > 0; i--) {
        if (arr[i - 1>= arr[i]) {
            ans+=arr[i - 1- (arr[i] - 1);
            arr[i - 1= arr[i] - 1;
        }
    }
    cout << ans;
}
cs
반응형

'백준 > 그리디' 카테고리의 다른 글

백준 11000  (0) 2021.02.05
백준 16953  (0) 2021.02.05
백준 1439  (0) 2021.02.05
백준 1449  (0) 2021.02.05
백준 2437  (0) 2021.02.05

+ Recent posts