전공/백준
14889
yha97
2022. 10. 12. 14:07
날짜 : 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