접근
엉엉..ㅠ 어려운 문제였다.. 예전에도 못풀고 포기했었던 문제였는데 이번에는 리더님의 도움을 받아 간신히 풀 수 있었다
크게 search, check 파트로 나뉜다.
- search 함수
- dfs를 이용하여 모든 경우의 수를 순회한다
- for loop이 0부터 n까지 돌아간다(이 부분을 잘하면 최적화를 할 수 있을 것같긴 하다)
- 현재 x 자리에 순회하면서 업데이트 되는 값들을 넣어주고(y값들)
- check했을 때 True라면 그 다음 자리인 x + 1 자리로 넘어가서 다시 탐색한다. (dfs 방식)
- loop 한 턴에 한 column 씩 확인
- check 함수
- 현재 위치와 값이 주어진 조건에 부합하는지 확인하고, boolean을 리턴한다
개념이 살짝 말로 하기 어려워서 그림으로 잘 풀어내봤는데 미래의 내가 다시 보았을 때도 이해할 수 있기를..ㅎ
코드
from collections import deque
def solution(n):
return search(n, 0, deque([0] * n))
def search(n, x, stack):
answer = 0
if n == x:
return 1
for y in range(n):
stack[x] = y
if check(x, stack):
answer += search(n, x + 1, stack)
return answer
def check(x, stack):
for y in range(x):
if stack[y] == stack[x] or abs(stack[y] - stack[x]) == x - y:
return False
return True
'코테 준비' 카테고리의 다른 글
[프로그래머스] 삼각 달팽이 (0) | 2020.10.11 |
---|---|
[프로그래머스] 가장 긴 팰린드롬 (0) | 2020.09.29 |
[프로그래머스] 카펫 (0) | 2020.09.20 |
[프로그래머스] 세 소수의 합 (0) | 2020.09.18 |
[프로그래머스] 빙고 (0) | 2020.09.12 |