-
Notifications
You must be signed in to change notification settings - Fork 1
6-froglike6 #24
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
6-froglike6 #24
Conversation
hadongun
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
μ€.. λΉνΈ μ°μ°μ ν΅ν΄ μΆ©λ μ¬λΆλ₯Ό νλ¨ ν μ μκ΅°μ..!
μ λ forλ¬Έμ ν΅ν΄ rowνμ νΈμ λκ³ κ°μ μ΄μ νΈμ΄ μλμ§(col[row]), λκ°μ λ°©ν₯μ νΈμ΄ μλμ§ νμΈνλ λ°©λ²μ μκ°ν΄λ΄€μ΄μ₯
if col[i] == col[row] or abs(col[row] - col[i]) == row - i:
caucsejunseo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
μμκ³Ό μ½λ νμ€ νμ€ μ€λͺ μ λ¬μμ£Όμ μ μ΄ν΄νκΈ° λ무 μ’μμ΅λλ€!
μ²μ λ¬Έμ λ΄€μ λ μ΄μ°¨μ λ°°μ΄μ μκ°νλλ° λΉνΈ μ°μ°μΌλ‘ ν΄κ²°νμ μ μ΄ ν₯λ―Έλ‘μ μ΅λλ€
λ°±νΈλ νΉμ λν΄μλ μλ‘ μ νκ² λμ μ μ΅νλ κ±° κ°μμ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
μμ°...μ λ μ΄κ±° μλ μ½λ μμμΌλ©΄ λͺ» μ½μλ» νλ€μ...
λ°±νΈλνΉμ λν΄μ 곡λΆλ κ°μ΄νλκ²Έ λ¬Έμ λ₯Ό νμ΄λ³΄λ €κ³ νλλ°,
μ κ·Όμ μ¬μ λλ° κ΅¬ν λ₯λ ₯μ΄ μμ¬μμ,, λ¬Έμ λ₯Ό λ§μΆ λ κΉμ§ μκ°μ΄ μ€λ κ±Έλ Έμ΅λλ€..
μ λ λΉνΈλ§μ€νΉμ λν κ°λ
μ λͺ°λΌμ κ·Έλ₯ λ°±νΈλνΉμΌλ‘λ§ νμμλλ·.
μΈλ±μ€λ₯Ό νμΌλ‘, κ°μ μ΄λ‘ μ€μ ν λ°°μ΄μ μ¬μ©νμ΅λλ€.
μ²μμ κ·Έλ₯ ν μ΄ λ λ€ μΈλ±μ€λ‘ μ¨λ³΄λ €λ€κ° κ°μ λ£μκ² μλλΌκ΅¬μ.
κ°μ μ΄μ μμΉνλμ§, κ°μ λκ°μ μ μμΉνλμ§ κ²μ¬ν΄μ λΆλͺνμ§ μκ² μ‘°κ±΄λ¬Έμ μ§°μ΅λλ€.
λ°±νΈλνΉ μ체λ μ€λ μ°Ύμλ³΄κ³ λ°°μ°κΈ° μμνκ±°λΌ μ€μ€λ‘ νμ΄λ΄μλ λ°μλ§ 2μκ°μ μ΄ κ² κ°μ΅λλ€.. promisingμ κ²μ¬νλ λΆλΆμμ κ½€λ μ λ₯Ό λ¨Ήμλ€μ..
C++ μ½λ
#include <iostream>
using namespace std;
int N;
int result = 0;
int column[15];
bool isPromising(int currentRow) {
for(int prevRow = 0; prevRow < currentRow; prevRow++) {
if(column[prevRow] == column[currentRow] || abs(column[currentRow] - column[prevRow]) == currentRow - prevRow) {
return false;
}
}
return true;
}
void NQueens(int row) {
if(row == N) {
result++;
return;
}
for(int i = 0; i < N; i++) {
column[row] = i;
if(isPromising(row)) {
NQueens(row + 1);
}
}
}
int main() {
cin >> N;
NQueens(0);
cout << result << endl;
return 0;
}λ²μΈλ‘ μ΄λ° νλμ½λ©λ μ λ΅μΌλ‘ μ³μ£Όλκ΅°μ...νν
μ λ ₯λλ‘ μ ν΄μ§ μ λ΅μ μΆλ ₯νλ μ½λ
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
if (N == 1) cout << 1 << endl;
else if (N == 2) cout << 0 << endl;
else if (N == 3) cout << 0 << endl;
else if (N == 4) cout << 2 << endl;
else if (N == 5) cout << 10 << endl;
else if (N == 6) cout << 4 << endl;
else if (N == 7) cout << 40 << endl;
else if (N == 8) cout << 92 << endl;
else if (N == 9) cout << 352 << endl;
else if (N == 10) cout << 724 << endl;
else if (N == 11) cout << 2680 << endl;
else if (N == 12) cout << 14200 << endl;
else if (N == 13) cout << 73712 << endl;
else if (N == 14) cout << 365596 << endl;
return 0;
}λΉνΈλ§μ€νΉ κ°λ
μ΄ ν₯λ―Έλ‘μ΄λ° μ΄κ²κΉμ§ 곡λΆνκΈ°μλ λ¬΄λ¦¬κ° μμ΄λ³΄μ΄λ€μ νν£
μ£Όμ κ±°μ μλ‘μ΄ κ°λ
μ 2,3κ°μ© 곡λΆνλ κ² κ°μμ..
μ‘°λ§κ° λ³΅μ΅ μ°¨μμμ νλ°ν΄ μΉ λλ €μΌκ² μ΅λλ€..
π λ¬Έμ λ§ν¬
N-Queen
βοΈ μμλ μκ°
μ½ 40λΆ
β¨ μλ μ½λ
μλ‘ κ³΅κ²©νμ§ μλ Nκ°μ νΈμ NΓN 체μ€ν μμ λμ μ μλ λͺ¨λ κ²½μ°μ μλ₯Ό ꡬνλ λ¬Έμ μ λλ€.
νΈμ κ°μ ν, κ°μ μ΄, κ°μ λκ°μ μ μλ λ§μ 곡격ν μ μμΌλ―λ‘, λ€μ μ μ½μ λ§μ‘±νλμ§ νμΈνλ©° νμν©λλ€.
μλμ½λ
μ λ λΉνΈλ§μ€ν¬λ₯Ό μ΄μ©ν λ°±νΈλνΉ λ°©μμΌλ‘ ν΄κ²°νμ΅λλ€.
μμ μ μ΄λ μ΄λ €μ΄ λ¬Έμ (μλ§λ λ£¨λΉ λ¬Έμ )μμ λ΄€λ κΈ°μ΅μ΄ λμ μ¬μ©ν΄λ³΄μμ΅λλ€.
μ΄ λ°©λ²μ μ΄/λκ°μ μ μ½ μ‘°κ±΄μ λΉνΈ μ°μ°μΌλ‘ λΉ λ₯΄κ² κ²μ¬ν μ μμ΄ λ§€μ° ν¨μ¨μ μ λλ€.
λΉνΈλ§μ€ν¬
λΉνΈλ§μ€ν¬λ μ μμ μ΄μ§μ ννμ νμ©νμ¬ μ¬λ¬ κ°μ μνλ₯Ό νλμ μ«μλ‘ νννλ κΈ°λ²μ λλ€.
κ° λΉνΈλ νΉμ 쑰건μ μΆ©μ‘± μ¬λΆλ₯Ό μλ―Ένλ©°, 1μ΄λ©΄ μ°Έ(True), 0μ΄λ©΄ κ±°μ§(False)μ λνλ λλ€.
μμ
체μ€νμ΄ n = 4μΌ λ,
μ«μ
0b1010(μ΄μ§μ)μ λ€μκ³Ό κ°μ μνλ₯Ό λ»ν©λλ€:μ¦, νΈμ΄ 1λ²κ³Ό 3λ² μ΄μ μλ€λ λ»μ λλ€.
μ½λ μ€λͺ
cols: νΉμ μ΄μ νΈμ΄ μ΄λ―Έ λ°°μΉλμλμ§ μ¬λΆdiag1: β λ°©ν₯ λκ°μ (row + colμ΄ κ°μ μμΉ)diag2: β λ°©ν₯ λκ°μ (row - colμ΄ κ°μ μμΉ)λΉνΈ μ°μ°μ ν΅ν΄ μΆ©λ μ¬λΆλ₯Ό O(1)λ‘ νλ¨ν μ μμ΅λλ€.
μ΄ μ½λλ "νμ¬ νμμ νΈμ λμ μ μλ μμΉ"λ₯Ό κ³μ°ν©λλ€.
ν μ€μ© μ½κ² μ€λͺ ν΄λ³΄λ©΄:
cols | diag1 | diag2μ§κΈκΉμ§ νΈμ΄ λμΈ μ΄, β λ°©ν₯ λκ°μ , β λ°©ν₯ λκ°μ μ 보λ₯Ό λͺ¨λ ν©μΉ©λλ€.
|μ°μ°μ "λλ"μ΄λ―λ‘, μ΄λ ν κ³³μ΄λΌλ νΈμ΄ μμΌλ©΄ 1μ΄ λ©λλ€.~(cols | diag1 | diag2)μμμ 1μ΄ λ λΆλΆ(νΈμ΄ μκ±°λ 곡격λ°λ μ리)μ λ°μ μμΌ
β νΈμ λμ μ μλ μλ¦¬λ§ 1λ‘ λ§λλλ€.
& ((1 << n) - 1)μ: n = 4λΌλ©΄
1 << 4 = 16 = 0b10000((1 << n) - 1)β0b1111(νμ nλΉνΈλ§ 1)μ΄κ²μ
&μ°μ°ν΄μ n x n 체μ€ν μ΄μΈμ μμ λΉνΈλ₯Ό μ κ±°ν©λλ€.μ΄ κ³μ°μ κ²°κ³ΌμΈ
availableμνμ¬ νμμ νΈμ λμ μ μλ μ΄μ 1λ‘ νμν λΉνΈλ§μ€ν¬μ λλ€.
λ€μ μ½λ
available = 0b10100βposition = 0b00100λ°±νΈλνΉ
λ°±νΈλνΉμ κ°λ₯ν ν΄λ₯Ό μ°ΎκΈ° μν΄ λͺ¨λ ν보λ₯Ό νμνλ, μ ν¨νμ§ μμ κ²½μ° λ κΉμ νμμ νμ§ μκ³ μ¦μ λλμκ°λ νμ κΈ°λ²μ λλ€.
μ΄ λ¬Έμ μμλ λ€μκ³Ό κ°μ 쑰건μμ λ°±νΈλνΉμ΄ μ μ©λ©λλ€:
π μλ‘κ² μκ²λ λ΄μ©
x & -xλ₯Ό μ΄μ©ν΄ κ°μ₯ μ€λ₯Έμͺ½ 1λΉνΈλ₯Ό λΉ λ₯΄κ² μΆμΆν μ μμ (λνμ μΈ λΉνΈλ§μ€ν¬ νΈλ¦)