- μ΄λΆνμ
- μκ³ λ¦¬μ¦
- LCs
- λ°±μ€
- μΉ΄μΉ΄μ€2021
- ν리μ¨λ³΄λ©
- λΉνΈλ§΅
- μ¬λΌμ΄λ© μλμ°
- DFS
- nestjs
- μν°λ
- μΉ΄μΉ΄μ€ μ½ν
- λΉνΈλ§μ€νΉ
- js
- λ°±μλ ν리μ¨λ³΄λ©
- νλ‘κ·Έλλ¨Έμ€
- Python
- μ¬κ·
- μμ½λ
- νΈλ¦¬
- κ°μ₯κ°κΉμ΄κ³΅ν΅μ‘°μ
- Union-Find
- DP
- C++
- BFS
- λ€μ΅μ€νΈλΌ
- golang
- μΉλ¦°μ΄
- λμ νλ‘κ·Έλλ°
- go
- Today
- Total
Hello Ocean! πΌ
[λ°±μ€/C++] 1941. μλ¬Έλ μΉ κ³΅μ£Ό λ³Έλ¬Έ
λ¬Έμ
https://www.acmicpc.net/problem/1941
μ΄ 25λͺ μ μ¬νμλ€λ‘ μ΄λ£¨μ΄μ§ μ¬νμλ°μ 5*5μ μ μ¬κ°ν 격μ ννλ‘ μλ¦¬κ° λ°°μΉλμκ³ , μΌλ§ μ§λμ§ μμ μ΄λ€μκ³Ό μλμ°μ΄λΌλ λ νμμ΄ λκ°μ λνλ΄λ©° λ€λ₯Έ νμλ€μ νμ΄μ‘κΈ° μμνλ€. 곧 λͺ¨λ μ¬νμμ΄ ‘μ΄λ€μν’μ ‘μλμ°ν’μ λ νλ‘ κ°λΌμ§κ² λμμΌλ©°, μΌλ§ μ§λμ§ μμ ‘μλμ°ν’κ° μΈλ ₯μ νμ₯μν€λ©° ‘μ΄λ€μν’λ₯Ό μννκΈ° μμνλ€.
μκΈ°μμμ λλ ‘μ΄λ€μν’μ νμλ€μ κ³Όκ°ν νμ¬μ 체μ λ₯Ό ν¬κΈ°νκ³ , ‘μλ¬Έλ μΉ κ³΅μ£Ό’λ₯Ό κ²°μ±νλ κ²μ΄ μ μΌν μμ‘΄ μλ¨μμ κΉ¨λ¬μλ€. ‘μλ¬Έλ μΉ κ³΅μ£Ό’λ λ€μκ³Ό κ°μ κ·μΉμ λ§μ‘±ν΄μΌ νλ€.
- μ΄λ¦μ΄ μ΄λ¦μΈ λ§νΌ, 7λͺ μ μ¬νμλ€λ‘ ꡬμ±λμ΄μΌ νλ€.
- κ°ν κ²°μλ ₯μ μν΄, 7λͺ μ μ리λ μλ‘ κ°λ‘λ μΈλ‘λ‘ λ°λμ μΈμ ν΄ μμ΄μΌ νλ€.
- νν©κ³Ό λ²μμ μν΄, λ°λμ ‘μ΄λ€μν’μ νμλ€λ‘λ§ κ΅¬μ±λ νμλ μλ€.
- κ·Έλ¬λ μμ‘΄μ μν΄, ‘μ΄λ€μν’κ° λ°λμ μ°μλ₯Ό μ ν΄μΌ νλ€. λ°λΌμ 7λͺ μ νμ μ€ ‘μ΄λ€μν’μ νμμ΄ μ μ΄λ 4λͺ μ΄μμ λ°λμ ν¬ν¨λμ΄ μμ΄μΌ νλ€.
μ¬νμλ°μ μ리 λ°°μΉλκ° μ£Όμ΄μ‘μ λ, ‘μλ¬Έλ μΉ κ³΅μ£Ό’λ₯Ό κ²°μ±ν μ μλ λͺ¨λ κ²½μ°μ μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
νμ΄
[κ²°λ‘ ]
25κ° μ€μ 7κ°λ₯Ό λ½λ λͺ¨λ μ‘°ν©μ ꡬν΄μ, ν΄λΉ μ‘°ν©μ λν 쑰건(μ΄λ€μνκ° 4λͺ μ΄μμΈμ§, λͺ¨λ μΈμ ν΄ μλμ§)μ νμΈν΄μ 쑰건μ λ§μ‘±νλ κ²½μ°λ₯Ό μΈλ©΄ λλ€.
[μλ 1]
DFSλ₯Ό μ΄μ©ν λ°±νΈλνΉμ νλ€. κ²°κ³Όλ νλ Έμ΅λλ€ μλ€.
λ°λ‘λ₯Ό νμΈν΄λ³΄λ DFSμ κ²½μ° + μ΄λ° μμ λͺ¨μμ μΌμ΄μ€λ μ‘μλΌ μ μμλ€. \
[μλ 2]
λͺ¨λ μ‘°ν©μ ꡬν΄μ, 쑰건μ νμΈνλ€.
7κ³΅μ£Όκ° λͺ¨λ μΈμ ν΄ μλμ§ νμΈν λ, 주먹ꡬꡬμμΌλ‘ 7곡주 μ리μ μνμ’μ°μ λ€λ₯Έ 7κ³΅μ£Όκ° μλμ§ νμΈνλλ° λ νλ Έλ€!
λ°λ‘λ₯Ό νμΈν΄λ³΄λ 7κ³΅μ£Όκ° λͺ¨λ μΈμ ν΄ μμ§ μκ³ λκ°-μΈκ° λ©μ΄λ¦¬λ‘ λμ€λ κ²½μ°κ° μμλ€.
[μλ 3 (κ²°λ‘ )]
λͺ¨λ μ‘°ν©μ ꡬν΄μ, 쑰건μ νμΈνλλ° BFSλ₯Ό μ΄μ©νλ€.
μ‘°κΈμ΄λλ§ μκ°λ³΅μ‘λλ₯Ό μ€μ΄κΈ° μν΄μ, μ‘°ν©μ λ½λ μ€κ°μ μλμ°ν(Y)κ° 4λͺ μ΄μμ΄λλ©΄ ν΄λΉ μΌμ΄μ€λ λ μ΄μ μ§ννμ§ μκ³ λ²λ Έλ€.
λͺ¨λ μ‘°ν©μ κ°―μκ° 25C7 = 480,700 λ°μ λμ§ μμμ λͺ¨λ μ‘°ν©μ λ€ κ²μ¬ν΄λ μκ°μ΄κ³Όκ° λμ§ μμλ€.
μ½λ
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
char table[5][5];
int cache[5][5];
int answer = 0;
int dr[4] = { -1,1,0,0 };
int dc[4] = { 0,0,-1,1 };
bool isOk(vector<int> selected) {
fill(&cache[0][0], &cache[4][5], 0);
for (int i = 0;i < 7;i++) {
cache[selected[i] / 5][selected[i] % 5] = 2; // 7곡주 μ리 νμ
}
queue<pair<int, int>> q;
q.push({ selected[0] / 5, selected[0] % 5 });
cache[selected[0] / 5][selected[0] % 5] = 1;
int remain = 6;
while (!q.empty()) {
int r = q.front().first;
int c = q.front().second;
q.pop();
for (int i = 0;i < 4;i++) {
int newR = r + dr[i];
int newC = c + dc[i];
if (newR < 0 || newR>4 || newC < 0 || newC>4) continue;
// λ°©λ¬Έν μ μ΄ μλ 7곡주 μ리μ΄λ©΄
if (cache[newR][newC] == 2) {
remain--;
cache[newR][newC] = 1;
q.push({ newR, newC });
}
}
}
// BFSνμμ μλ£νλλ°, 7곡주λ₯Ό λͺ¨λ μ°Ύμλ€ -> λͺ¨λ μΈμ ν΄μλ€.
if (remain == 0)
return true;
else
return false;
}
// 0~24 (25κ°) μμ 7κ° λ½κΈ°
void combi(int start, int doyean, int count, vector<int> selected) {
if (count == 7) {
if (isOk(selected)) answer++;
return;
}
if (table[start / 5][start % 5] == 'Y') doyean++;
for (int i = start+1;i < 25;i++) {
if (table[i / 5][i % 5] == 'Y') {
// λμ°νκ° 4λͺ
μ΄μμ΄ λλ©΄ λ μ΄μ μ§νx
if (doyean + 1 > 3) continue;
}
selected.push_back(i);
combi(i, doyean, count + 1, selected);
selected.pop_back();
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
for (int i = 0;i < 5;i++) {
for (int j = 0;j < 5;j++) {
cin >> table[i][j];
}
}
for (int i = 0;i < 25;i++)
combi(i, 0, 1, {i});
cout << answer << endl;
return 0;
}
κ²°κ³Ό
'Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€/C++] 14725. κ°λ―Έκ΅΄ (0) | 2021.09.07 |
---|---|
[λ°±μ€/C++] 17370. μ‘κ°ν μ°λ¦¬ μμ κ°λ―Έ (0) | 2021.08.24 |
[λ°±μ€/C++] 1405. λ―ΈμΉ λ‘λ΄ (0) | 2021.08.17 |
[λ°±μ€/C++] 17182. μ°μ£Ό νμ¬μ (0) | 2021.08.17 |
[λ°±μ€/C++] 1062. κ°λ₯΄μΉ¨ (0) | 2021.08.10 |