인프런 커뮤니티 질문&답변

영영님의 프로필 이미지
영영

작성한 질문수

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

5. 동전분배하기(DFS)

money.sort()하면 왜 값이 달라지나요?

작성

·

257

0

처음에 제가 짠 코드는 주석부분입니다. 최대 최소의 차를 구하는 과정에서 리스트를 정렬 한 후 양 끝값을 빼는 방식으로 코드를 짰었는데 값이 이상하여 money를 찍어보니,  money.sort()코드가 있으면 money값이 음수값이 나오는 등 제대로 값이 입력이 안되는 모습이 보였습니다.  차를 max-min으로 하던 리스트로 하던 상관없이 sort()의 여부에 따라 값이 달라지더라구요.

왜 이런 현상이 나오는건지 이해가 잘 안가서 혹시 설명을 부탁드릴 수 있을까요?ㅠㅠ

n=7
coin =[8,9,11,12,23,15,17]
ans = []
min_ans = 2147000000
money = [0 for i in range(3)]

def DFS(node):
global min_ans
if node == n:
#money.sort()
#ans = money[2]-money[0]
#print(ans)
ans = max(money)-min(money)
# print(ans)
# if money[0]!=money[1] and money[1]!=money[2] and money[0]!=money[2]:
# if min_ans > ans:
# min_ans = ans
if min_ans > ans:
temp = set()
for i in range(3):
temp.add(money[i])
if len(temp)==3:
min_ans = ans

else:
for i in range(3):
money[i]+=coin[node]
DFS(node+1)
money[i]-=coin[node]

DFS(0)
print(min_ans)

답변 2

3

김태원님의 프로필 이미지
김태원
지식공유자

money[0]값,  money[1]값,  money[2]값이 각각 무엇을 의미하는지 생각해보세요.

하나의 경우가 완성된 상태에서 이 값들을 정렬해서 서로 바꾸어 버리면 다음 경우를 만들때 어떤 일이 일어나는지 연필로 DFS트리를 만들어 가면서 확인해보시기 바랍니다.

0

영영님의 프로필 이미지
영영
질문자

아 인덱스 위치가 계속 바뀌게 되면서 해당 값이 아닌 다른값을 빼주게 되는 상황이 발생해 버리는군요. 조금만 더 생각해 봤으면 해결했을 수 있었던 부분일건데 ㅠㅠ 감사합니다!

영영님의 프로필 이미지
영영

작성한 질문수

질문하기