1. 해결방법
가지치기를 하면 좋지만 아직 실력이 부족해서 모든 경우를 탐색하는 dfs로 해결하였다.
1. 거쳐가야 하는 집을 targets이라는 리스트로 만들어서 따로 처리.
2. dfs를 돌면서 temp에 dis와 해당 집 거리를 계산하여서 dis 거리 저장 변수에 갱신
3. depth가 N일 때, 종료 후 거쳐간 마지막 집에서 본인 집까지의 거리를 추가한 후 리턴
2. 정답코드
# T = int(input())
T = 1
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
N = int(input())
numbers = list(map(int, input().split()))
chk = [False] * N
min_v = 1e9
def dfs(depth, company, dis):
global min_v, home
if depth == N:
dis += abs(home[0] - company[0]) + abs(home[1] - company[1])
min_v = min(min_v, dis)
return
for i in range(N):
if chk[i] == False:
chk[i] = True
temp = dis + abs(company[0] - targets[i][0]) + abs(company[1] - targets[i][1])
dfs(depth + 1, (targets[i][0], targets[i][1]), temp)
chk[i] = False
targets = []
for i in range(4, len(numbers), 2):
targets.append((numbers[i], numbers[i + 1]))
company = (numbers.pop(0), numbers.pop(0))
home = (numbers.pop(0), numbers.pop(0))
dfs(0, company, 0)
print(f'#{test_case} {min_v}')
'Algorithm > SWEA' 카테고리의 다른 글
[SWEA] D4. Ladder1 Python, Java (0) | 2023.02.08 |
---|---|
[SWEA] D3. Sum (JAVA) (0) | 2023.01.17 |
[SWEA] D4. 미로1 (0) | 2023.01.10 |
[SWEA] D4. 보급로 (0) | 2023.01.09 |
[SWEA] D4. 준환이의 양팔저울 (0) | 2023.01.03 |