ji_iin
iOSLog
ji_iin
전체 방문자
오늘
어제
  • 분류 전체보기 (56)
    • Swift (8)
    • iOS (6)
    • 알고리즘 (34)
    • CS (3)
    • 회고 (3)
    • 제품리뷰 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 구조체와 클래스
  • 회고
  • 백트래킹
  • 너비우선탐색
  • 그래프이론
  • 재귀
  • 알고리즘개념
  • Bye2023
  • Python
  • 파이썬
  • 다이나믹 프로그래밍
  • SWiFT
  • 브루트포스 알고리즘
  • 대기업코테
  • 공식문서
  • 자바
  • 정렬
  • ios
  • swiftUI
  • 개발회고
  • django
  • 알고리즘
  • opional
  • 프로그래머스
  • 2022년 회고
  • 그래프탐색
  • 깊은복사와 얕은복사
  • 수학
  • 백준
  • 깊이우선탐색

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ji_iin
알고리즘

[Python] 백준 9663 : N-Queen

[Python] 백준 9663 : N-Queen
알고리즘

[Python] 백준 9663 : N-Queen

2021. 8. 19. 00:44

문제

https://www.acmicpc.net/problem/9663

[ 문제 조건 ]

  • 1 ≤ N < 15
  • 출력 : 서로 공격할 수 없게 놓는 경우의 수
  • 백트래킹 문제 → 개념을 알고 있어야 함

[ 해결순서 ]

  1. 체스판에 퀸을 놓기위한 조건은 퀸의 가로, 세로, 대각선에 위치한 곳에 두면 안된다.
  2. 백 트래킹 문제에선 퀸을 놓을 때 직전의 열에 두지 않는다고 한다. ( 중복제거를 위해 )
  3. 하나의 행에 하나의 퀸만 놓을 수 있다.
  4. 그렇다면 N * N개의 경우의 수가 존재 할 텐데 이 중에서 서로 공격하지 않게 놓는 경우의 수를 구해야한다.
  5. nqeen()은 퀸을 오른쪽 행으로 하나씩 옮기면서 경우의 수를 확인하고
  6. check()로 행은 비교할 필요가 없고 (3번참고) 같은 열인지, 대각선상에 있는지 비교한다.
  7. nqeen()에서 퀸이 끝 행까지 도달했다면 경우의 수(count)를 하나 추가해준다.
  8. 이를 재귀적으로 반복해서 값을 구한다.

[ 예제 직접구현 ]

✏️한줄평

: 백 트래킹이 무엇인지 개념을 파악할 수 있었다. 처음 접한 개념이라 낯설게 느껴져 시간소요를 많이 했지만 다시 복습하거나 다른 비슷한 유형 풀면서 익숙해져야겠다.


코드

N = int(input())
board = [0 for _ in range(N)] #체스판
count = 0 #퀸 N개를 서로 공격할 수 없게 놓는 경우의 수
#다음행만 가능 -> 중복 제거를 위해
#인덱스 행, board[x]은 열
def nqueen(x):
global count
if N == x: #체스를 끝 행까지 도달했을 때
count += 1
else:
for i in range(N):
board[x] = i #x번째 행, i열에 퀸 놓음
if check(x): #행,열,대각선이 같은 위치에 없다면
nqueen(x+1) # 해당 경우보다 한단계 깊이 재귀적으로 또 확인
def check(val):
for i in range(val): #열, 대각선 같은지 비교
if board[val] == board[i] or abs(board[val] - board[i]) == val - i:
return False
return True
nqueen(0)
print(count)
view raw BOJ9663.py hosted with ❤ by GitHub

'알고리즘' 카테고리의 다른 글

[Python] 백준 1932 : 정수 삼각형  (0) 2021.08.23
[Python] 백준 1946 : 신입사원  (0) 2021.08.23
[Python] 백준 2468번 - 안전 영역  (0) 2021.08.09
[Python] map 함수로 2차원배열의 최대값 구하기  (0) 2021.08.09
[Python] 백준 9020번 - 골드바흐의 추측  (0) 2021.08.06
  • 문제
  • [ 문제 조건 ]
  • [ 해결순서 ]
  • [ 예제 직접구현 ]
  • ✏️한줄평
  • 코드
'알고리즘' 카테고리의 다른 글
  • [Python] 백준 1932 : 정수 삼각형
  • [Python] 백준 1946 : 신입사원
  • [Python] 백준 2468번 - 안전 영역
  • [Python] map 함수로 2차원배열의 최대값 구하기
ji_iin
ji_iin
개발성장일지🐥

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.