BOJ : https://www.acmicpc.net/problem/1260

GitHub : https://github.com/junho0956/Algorithm/blob/master/1260/1260/%EC%86%8C%EC%8A%A4.cpp

 

dfs bfs 의 기본지식을 묻는 문제이다.

작은정점부터 방문하라 했으니 정렬을 해줘야한다.

 

더보기
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
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
 
int N, M, start;
int s, e;
vector<int> v[1001];
bool visit[1001];
 
void dfs(int start) {
    if (visit[start]) return;
    visit[start] = 1;
    cout << start << " ";
 
    for (int i = 0; i < v[start].size(); i++) {
        dfs(v[start][i]);
    }
}
 
void bfs(int start) {
    queue<int> q;
 
    q.push(start);
    while (!q.empty()) {
        int cur = q.front();
        q.pop();
 
        if (visit[cur]) continue;
        visit[cur] = 1;
        cout << cur << " ";
 
        for (int i = 0; i < v[cur].size(); i++) {
            if (!visit[v[cur][i]]) q.push(v[cur][i]);
        }
    }
}
 
int main() {
    ios::sync_with_stdio(false); cin.tie(0);
 
    cin >> N >> M >> start;
    for (int i = 0; i < M; i++) {
        cin >> s >> e;
        v[s].push_back(e);
        v[e].push_back(s);
    }
 
    for (int i = 1; i <= N; i++) sort(v[i].begin(), v[i].end());
 
    dfs(start);
    cout << '\n';
    memset(visit, 0sizeof(visit));
    bfs(start);
 
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

'algorithm > BOJ' 카테고리의 다른 글

BOJ 1707번 이분 그래프  (0) 2020.01.13
BOJ 11724번 연결 요소의 개수  (0) 2020.01.13
BOJ 2004번 조합 0의 개수  (0) 2020.01.13
BOJ 1676번 팩토리얼 0의 개수  (0) 2020.01.13
BOJ 10872번 팩토리얼  (0) 2020.01.13

BOJ : https://www.acmicpc.net/problem/2004

GitHub : https://github.com/junho0956/Algorithm/blob/master/2004/2004/%EC%86%8C%EC%8A%A4.cpp

 

이전에 풀었던 팩토리얼 0의 개수와 비슷한 문제이다.

조합을 통해 0을 만들 수 있는 조건이 무엇일까

1 3 7 9 같은 숫자로는 아무리 곱하고 나누어봐도 ..0 이라는 숫자를 만들 수가 없다.

=> 2와 5가 필요한게 이 문제의 핵심이다.

 

그럼 2와 5를 소인수분해를 통해서 개수를 알게된다면

어떻게 해야 0을 만들 수 있을까?

 

** 만약 2가 4개, 5가 3개라면 ==> 0은 3개가 나온다

** 만약 2가 7개, 5가 2개라면 ==> 0은 2개가 나온다

 

==> 2와 5의 갯수중 적은 숫자만큼 곱해야 0이 나오게된다.

 

더보기
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>
using namespace std;
 
int solve(int sizeint num) {
 
    int cnt = 0;
    while (size>=num) {
        cnt+=size/num;
        size /= num;
    }
 
    return cnt;
}
 
int main() {
    int n, m, five, two;
    cin >> n >> m;
 
    five = solve(n, 5- solve(n - m, 5- solve(m, 5);
    two = solve(n, 2- solve(n - m, 2- solve(m, 2);
 
    if (five >= two) cout << two;
    else cout << five;
 
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

'algorithm > BOJ' 카테고리의 다른 글

BOJ 11724번 연결 요소의 개수  (0) 2020.01.13
BOJ 1260번 DFS와 BFS  (0) 2020.01.13
BOJ 1676번 팩토리얼 0의 개수  (0) 2020.01.13
BOJ 10872번 팩토리얼  (0) 2020.01.13
BOJ 11653번 소인수분해  (0) 2020.01.13

BOJ : https://www.acmicpc.net/problem/1676

GitHub : https://github.com/junho0956/Algorithm/blob/master/1676/1676/%EC%86%8C%EC%8A%A4.cpp

 

처음엔 대체 어떻게 푸는걸까

계란을 까먹으면서 곰곰히 생각해보았다.

500!을 어떻게 알지?.. 그래서 0을 만들 수 있는 조건이 뭐가 있을까 생각해봤다.

공책에 끄적여보니 0-4 : 0개, 5-9 : 1개, 10-14 : 2개, 15-19 : 3개 20 : 4개 이렇게 나오길래

아 이건 5를 나눈 몫이 답이겠구나 하고 제출했다.

틀렸다.

왜일까 다시 생각해보니 5로 의해 만들어진다면 5의 곱들에 의해서도 만들어질수 있을 것 같았다.

그래서 500 이하의 5 제곱수인 25, 125 를 추가해서 제출했다. 

 

더보기
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
 
int main() {
    int N;
    cin >> N;
    cout << N / 5 + N/25 + N/125;
    return 0;
}

'algorithm > BOJ' 카테고리의 다른 글

BOJ 1260번 DFS와 BFS  (0) 2020.01.13
BOJ 2004번 조합 0의 개수  (0) 2020.01.13
BOJ 10872번 팩토리얼  (0) 2020.01.13
BOJ 11653번 소인수분해  (0) 2020.01.13
BOJ 6588번 골드바흐의 추측  (0) 2020.01.13

BOJ : https://www.acmicpc.net/problem/10872

GitHub : https://github.com/junho0956/Algorithm/blob/master/10872/10872/%EC%86%8C%EC%8A%A4.cpp

 

팩토리얼 큰 수가 될수록 반복계산에 의해서 시간이 오래걸리므로 처리해주자

 

더보기
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>
using namespace std;
 
long long dp[13];
 
long long factorial(long long n) {
    if (dp[n]) return dp[n];
    if (n == 1) {
        dp[n] = 1;
        return dp[n];
    }
 
    return n * factorial(n - 1);
}
 
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
 
    int N;
    cin >> N;
    if (N == 0cout << "1";
    else cout << factorial(N);
 
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

'algorithm > BOJ' 카테고리의 다른 글

BOJ 2004번 조합 0의 개수  (0) 2020.01.13
BOJ 1676번 팩토리얼 0의 개수  (0) 2020.01.13
BOJ 11653번 소인수분해  (0) 2020.01.13
BOJ 6588번 골드바흐의 추측  (0) 2020.01.13
BOJ 1929번 소수 구하기  (0) 2020.01.13

+ Recent posts