티스토리 뷰
728x90
문제
thinking
아주 전형적인 백트래킹 & dfs 문제이다 !
모든 경우를 전부 따져보되, 이미 답이 안되는 경우(값이 기존 결과값보다 큰 경우)는 바로 중단하면 된다.
열과 행이 겹치면 안되므로 dfs라는 함수의 인자로 행(i)을 넣어, 행을 증가시키며 경우를 체킹했고,
visited 라는 리스트를 만들어 열의 방문여부를 확인하도록 코드를 구성했다.
코드
def dfs(i, tmp): # 행, 현재 타임 합
global res
if tmp >= res:
return
if i == N:
res = min(tmp, res)
return
for j in range(N):
if not visited[j]:
visited[j] = 1
dfs(i+1, tmp+a[i][j])
visited[j] = 0
T = int(input())
for tc in range(1, T+1):
N = int(input())
a = [list(map(int, input().split())) for _ in range(N)]
res = 987654321
visited = [0]*N # 열 체크
dfs(0, 0)
print("#{} {}".format(tc, res))
'algorithm > swea' 카테고리의 다른 글
[swea] 5208. 전기버스2 / python 파이썬 (0) | 2021.05.05 |
---|---|
[swea] 5205. 퀵정렬 / python 파이썬 (0) | 2021.05.05 |
[swea] 5204. 베이비진 게임 / python 파이썬 (0) | 2021.04.15 |
[swea] 5202. 화물 도크 / python 파이썬 (0) | 2021.04.15 |
[swea] 5201. 컨테이너 운반 / python 파이썬 (0) | 2021.04.15 |
댓글
글 보관함
TAG
- 알고리즘
- 영어끝말잇기
- react
- 삼성코테
- 20056 마법사 상어와 파이어볼
- 파이썬
- merge 에러
- 17406 배열돌리기4
- 20057 마법사 상어와 토네이도
- 백준
- swea
- BFS
- 2018 카카오 공채
- merge에러
- 2579 계단오르기
- git 미러링
- 브루트포스
- 프로그래머스
- 21609 상어 중학교
- Python
- 기지국설치
- 보석쇼핑
- dp
- 삼성기출
- dfs
최근에 올라온 글
- Total
- Today
- Yesterday
최근에 달린 댓글