Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 시뮬레이션
- DP
- GROUP BY
- 자료구조
- 브루트포스
- 그래프 이론
- 투포인터
- 트리
- 그리디
- 다익스트라
- BFS
- 수학
- 누적합
- 다이나믹프로그래밍
- 구현
- 우선순위큐
- 다이나믹 프로그래밍
- 해시
- 재귀
- DFS
- 다시
- join
- MST
- 에라토스테네스의 체
- 분할정복
- 백트래킹
- 서브쿼리
- 크루스칼
- 그래프 탐색
- 플로이드-워셜
Archives
- Today
- Total
기록하고 까먹지 말기
14889 본문
날짜 : 2022. 10. 12
사용 언어 : python
문제
코드
import sys
def dfs(depth, idx):
global result
if depth == (n//2): # 스택이 다 찬 경우 능력치 비교
team1, team2 = 0, 0 # start, link의 능력치 설정
for i in range(n):
for j in range(n):
if visit[i] and visit[j]:
team1 += s[i][j] # true -> start
elif not visit[i] and not visit[j]:
team2 += s[i][j] # false -> link
result = min(result, abs(team1-team2))
return
for i in range(idx, n):
if visit[i]:
visit[i] = False
#start.append(i) # start 스택 채우기(True)
dfs(depth+1, i+1)
#start.pop()
visit[i] = True
n = int(sys.stdin.readline())
visit = [True] * n # 사용여부
#start = []
result = int(1e9) # 능력치 차이
# 좌표 입력
s = []
for _ in range(n):
tmp = list(map(int, sys.stdin.readline().split()))
s.append(tmp)
dfs(0, 0) # 재귀의 깊이, 반복지점
print(result)
알게된 점
- start, link 리스트를 만들고 두 스택이 전부 찼을 때 일일이 결과값을 구함으로써 답을 구하려고 했지만 시간초과가 나왔다.
- start 리스트를 없애고 단순 방문여부만을 체크해서 답을 구하려고 했지만 시간초과
- dfs에서 depth와 idx로 반복문을 처음부터 하지 않게 하기 위해서 시작했지만 14%에서 틀림
- 알고보니 dfs(depth+1, idx+1)로 기입해서 틀린거였나 했지만 고쳐도 틀림
- 그러고 맨 처음 result값을 999에서 int(1e9)로 수정했더니 드디어 맞았다.
- 풀이방식은 맞았지만 최적화 작업을 확실하게 하지 못해서 꽤 애를 먹은 것 같다.
참고 사이트
- https://developer-ellen.tistory.com/50
BOJ - 스타트와 링크 14889번 (python)
❓ 문제 - 백준 스타트와 링크 14889번 - python 풀이법 출처 (https://www.acmicpc.net/problem/14889) 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1..
developer-ellen.tistory.com