https://github.com/Dev-Guccin
Guccin
https://github.com/Dev-Guccin
전체 방문자
오늘
어제
  • 분류 전체보기 (172)
    • 알고리즘 (140)
    • 삽질방지 (13)
    • SystemHacking (1)
    • 일상 (4)
    • 개발 (8)
    • 스프링 부트 REST API 개발일지 (5)
    • JPA (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 최대공약수
  • 파이썬
  • 그래프
  • MST
  • BFS
  • 유클리드호제법
  • 프로그래머스
  • counter
  • 백준
  • 재귀
  • 그리디
  • 다익스트라
  • 스택
  • 이분탐색
  • 백트래킹
  • 최소힙
  • DP
  • 재귀함수
  • python3
  • 큐
  • 다이나믹 프로그래밍
  • 12015
  • LIS
  • 최단경로
  • Python
  • heapq
  • 이분 탐색
  • DFS
  • 다이나믹프로그래밍
  • 유니온 파인드

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
https://github.com/Dev-Guccin

Guccin

알고리즘

백준 9663 풀이 (백트래킹, 재귀함수)

2021. 2. 16. 17:25

사실 어제 풀다가 안풀려서 포기했다. 어제 짠 코드는 모든 경우를 다 확인하다보니 시간도 오래걸리고, 무엇보다 중복이 생겼다. 그래서 그냥 시원하게 던져버리고 오늘 다시 풀어보았다.

오늘은 접근을 달리했다. N * N개의 판에서 퀸이 4개가 들어가야한다고 하는데 이는 결국 각 행마다 퀸이 딱 하나씩 들어가야한다는 소리다.

즉, 무조건 배열이 [[0,?], [1,?], [2,?], [3,?] ......[n-1,?]] 이런 방식이면 되는거다. 따라서 이를 토대로 코드를 짰다.

N = int(input())

sum = 0
def queen(tlist,n):
    global N
    global sum
    if len(tlist) == N:
        sum+=1
        return
    
    for i in range(N):
        check = 0
        for ban in tlist:
            mi =  n - ban[0]
            if ban[1] == i or [n,i] == [ban[0]+mi,ban[1]+mi] or [n,i] == [ban[0]+mi,ban[1]-mi]:
                check = 1
                break
        if check == 1:
            continue
        tlist.append([n,i])
        queen(tlist,n+1)
        tlist.pop()
queen([],0)
print(sum)

여기서 문제는 python3로 제출하면 시간초과가 난다. 다른 고수님들의 블로그를 보니 재귀함수 자체가 파이썬과는 잘 안맞는다고 한다. claude-u.tistory.com/245

 

#196 백준 파이썬 [9663] N-Queen

https://www.acmicpc.net/problem/9663 #Solution 정답 코드(시간 초과) https://www.acmicpc.net/board/view/25761이 문제에 대해 파이썬 문의글. 시간 초과 때문에 되도록 파이썬을 이용하지 않도록 권장하고..

claude-u.tistory.com

즉, 시간복잡도상 백트래킹 문제 같은 경우는 c++을 사용하는게 좋다는 의견이다.

물론 나는 꼼수를 써서 python3가 아닌 pypy3로 제출을 해버렸다. pypy3가 정말 빠르다.

 

결론을 맺자면, 백트래킹 너무 어렵다.

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

백준 14889 풀이 (itertools,combinations)  (0) 2021.02.17
백준 14888 풀이 (재귀함수, 백트래킹, 연산자 끼워넣기)  (0) 2021.02.16
백준 15650 풀이 (재귀함수)  (0) 2021.02.15
백준 15649 풀이 (재귀함수, 백트래킹)  (0) 2021.02.15
백준 11651 풀이 (sort, 여러 인자 정렬하기)  (0) 2021.02.14
    '알고리즘' 카테고리의 다른 글
    • 백준 14889 풀이 (itertools,combinations)
    • 백준 14888 풀이 (재귀함수, 백트래킹, 연산자 끼워넣기)
    • 백준 15650 풀이 (재귀함수)
    • 백준 15649 풀이 (재귀함수, 백트래킹)
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin

    티스토리툴바