목록Algorithm (43)
서의 공간
[문제]: 15654번: N과 M (5) (acmicpc.net) #include #include #include using namespace std; int n, m; int vec[10]; int arr[10]; bool picked[10]; void solution(int k) { if (k == m) { for (int i = 0; i m; for (int i = 0; i > vec[i]; sort(vec, vec + n); solution(0); return 0; }
[문제]: 15652번: N과 M (4) (acmicpc.net) #include using namespace std; int n, m; int arr[10]; void solution(int k, int p) { if (k == m) { for (int i = 0; i < m; ++i) cout m; solution(0, 1); return 0; }
[문제]: 15651번: N과 M (3) (acmicpc.net) #include using namespace std; int n, m; int arr[10]; void solution(int k) { if (k == m) { for (int i = 0; i < m; ++i) cout m; solution(0); return 0; }
[문제]: 15650번: N과 M (2) (acmicpc.net) #include using namespace std; int n, m; int arr[10]; void solution(int k, int p) { if (k == m) { for (int i = 0; i < m; ++i) cout m; solution(0, 0); return 0; }
[문제]: 15649번: N과 M (1) (acmicpc.net) #include using namespace std; int n, m; int arr[10]; bool picked[10]; void solution(int k) { if (k == m) { for (int i = 0; i < m; ++i) cout m; solution(0); return 0; }
[문제]: 2447번: 별 찍기 - 10 (acmicpc.net) #include #include using namespace std; char map[2187][2187]; void solution(int y, int x, int n) { if (n == 1) { map[y][x] = '*'; return; } int div = n / 3; for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { if (i == 1 && j == 1) continue; solution(y + (div * i), x + (div * j), div); } } } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr..
[문제]: 9020번: 골드바흐의 추측 (acmicpc.net) 체로 소수를 걸러내는건 간단하다. 핵심은 만약 가능한 n의 골드바흐 파티션이 여러 가지인 경우 두 소수의 차이가 가장 작아야만 한다. 그렇게 하기 위해 주어진 입력 n의 중간부터 하나씩 작게 세어서 두 소수를 찾는다. #include using namespace std; bool che[10001]; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); fill(che, che + 10001, true); che[0] = che[1] = false; for (int i = 2; i * i T; while (T--) { int n; cin >> n..
28.1 도입 깊이 우선 탐색(depth-first search, DFS)은 그래프의 모든 정점을 탐색하는 방법 중 하나이다. 현재 정점과 인접한 간선들을 하나씩 검사하여, 아직 방문하지 않은 정점으로 향하는 간선이 있다면 그 간선을 따라가기를 반복한다. 이 과정에서 더 이상 갈 곳이 없는 막힌 정점에 도달하면 마지막에 따라왔던 간선을 따라 뒤로 돌아간다. 다음은 DFS를 구현한 코드이다. // 그래프의 인접 리스트 표현 vector adj; // 각 정점을 방문했는지 여부를 나타냄 vector visited; void dfs(int here) { cout
27.1 도입 # 그래프의 정의 그래프 G(V, E)는 어떤 자료나 개념을 표현하는 정점(vertex)들의 집합 V와 이들을 연결하는 간선(edge)들의 집합 E로 구성된 자료 구조이다. 그래프는 정점들과 간선들로 정의되며, 정점의 위치 정보나 간선의 순서 등은 그래프의 정의에 포함되지 않는다. # 그래프의 종류 방향 그래프(directed graph, 유향 그래프): 방향 그래프에서는 각 간선이 방향이라는 새로운 속성을 갖는다. 방향 그래프에서 두 정점 u, v가 있을 때 u에서 v로 가는 간선과 v에서 u로 가는 간선은 서로 다른 간선이다. 무방향 그래프(undirected graph): 간선에 방향이 없는 그래프. 가중치 그래프(weighted graph): 가중치 그래프는 각 간선에 가중치(wei..
[문제]: 5430번: AC (acmicpc.net) 이 문제의 핵심은 D 앞에 있는 R의 개수가 짝수인지 홀수인지 아는 것이다. D 앞에 R이 짝수개이면 짝수개의 R에 대해 뒤집는 연산은 의미가 없다. 따라서 D 연산을 할 때 앞에 원소를 삭제하면 된다. 만약 R이 홀수개라면 뒤집는 연산을 딱 한번만 한 것과 같으므로 한 번만 뒤집는다, 그러나 실제로는 배열을 뒤집지 않고 마지막 원소를 삭제하는 방법으로 원소를 삭제하는 위치만 바꾸어서 구현했다. 또한 실제로는 D 앞에 R이 짝수개인지 홀수개인지 카운트 하지 않고 짝수개이면 popWhere = false로, 홀수개이면 popWhere = true로 두어 D 연산이 삭제할 위치를 결정했다. 마지막에는 R의 총 개수가 짝수개인지 홀수개인지 확인해서 최종 배..