File tree Expand file tree Collapse file tree 2 files changed +21
-21
lines changed Expand file tree Collapse file tree 2 files changed +21
-21
lines changed Original file line number Diff line number Diff line change 1
- const { count } = require ( 'console' ) ;
2
1
let fs = require ( 'fs' ) ;
3
2
let input = fs . readFileSync ( '/dev/stdin' ) . toString ( ) . split ( '\n' ) ;
4
3
Original file line number Diff line number Diff line change 1
1
let fs = require ( 'fs' ) ;
2
2
let input = fs . readFileSync ( '/dev/stdin' ) . toString ( ) . split ( '\n' ) ;
3
3
4
- let N = Number ( input [ 0 ] ) ;
5
- let balloons = input [ 1 ] . split ( ' ' ) . map ( Number ) ;
4
+ let n = Number ( input [ 0 ] ) ;
5
+ let queens = [ ] ;
6
6
7
- let arrows = [ ] ;
8
- let answer = 0 ;
9
-
10
- for ( let h of balloons ) {
11
- let found = false ;
12
-
13
- // 현재 풍선을 터뜨릴 수 있는 화살 찾기
14
- for ( let i = 0 ; i < arrows . length ; i ++ ) {
15
- if ( arrows [ i ] === h ) {
16
- arrows [ i ] -- ; // 해당 화살의 높이를 감소
17
- found = true ;
18
- break ;
19
- }
7
+ // 해당 위치에 퀸을 놓을 수 있는지 확인
8
+ function possible ( x , y ) {
9
+ for ( let [ a , b ] of queens ) {
10
+ if ( a == x || b == y ) return false ;
11
+ if ( Math . abs ( a - x ) == Math . abs ( b - y ) ) return false ;
20
12
}
13
+ return true ;
14
+ }
21
15
22
- if ( ! found ) {
23
- // 기존 화살로 터뜨릴 수 없으면 새 화살 추가
24
- arrows . push ( h - 1 ) ;
25
- answer ++ ;
16
+ let cnt = 0 ;
17
+ function dfs ( row ) {
18
+ if ( row == n ) cnt += 1 ; // 퀸을 N개 배치 가능한 경우 카운트
19
+ // 현재 행에 존재하는 열을 하나씩 확인
20
+ for ( let i = 0 ; i < n ; i ++ ) {
21
+ if ( ! possible ( row , i ) ) continue ; // 현재 위치에 놓을 수 없다면 continue
22
+ queens . push ( [ row , i ] ) ;
23
+ dfs ( row + 1 ) ;
24
+ queens . pop ( ) ; // 현재 위치에서 퀸 제거
26
25
}
27
26
}
27
+ dfs ( 0 ) ;
28
+ console . log ( cnt ) ;
28
29
29
- console . log ( answer ) ;
30
+ // 강의
You can’t perform that action at this time.
0 commit comments