끝말잇기 코드에서 "사용완료 플래그 설정" 및 함수 인자 질문

반갑습니다.

나라 이름 끝말잇기를 해서 가장 길게 이어지는 순서일때의 나라 숫자를 구하는 문제에 대해서 아래와 같이 파이썬 코딩이 있는데요
(나라는 한 번씩만 사용할 수 있음)


# 월드컵 출전국을 배열로 설정
country = ["Brazil", "Croatia", "Mexico", "Cameroon",
"Spain", "Netherlands", "Chile", "Australia",
"Colombia", "Greece", "Cote d'Ivoire", "Japan",
"Uruguay", "Costa Rica", "England", "Italy",
"Switzerland", "Ecuador", "France", "Honduras",
"Argentina", "Bosnia and Herzegovina", "Iran",
"Nigeria", "Germany", "Portugal", "Ghana",
"USA", "Belgium", "Algeria", "Russia",
"Korea Republic"]

사용 완료 여부 확인

is_used = [False] * len(country)

def search(prev, depth):
global max_depth
is_last = True
for i, c in enumerate(country):
if c[0] == prev[-1].upper():
if not is_used[i]:
is_last = False
is_used[i] = True
search(c, depth + 1)
is_used[i] = False
if is_last:
max_depth=max([max_depth, depth])
return depth

모든 나라로부터 개시

max_depth = 0
for i, c in enumerate(country):
is_used[i] = True
search(c, 1)
is_used[i] = False

깊이의 최대치(끝말잇기로 이어지는 나라의 수)를 표시

print(max_depth)


[출처: 알고리즘 퍼즐 68, 14번 문제]

제 질문 사항은
1) 나라 이름을 탐색하는 함수 search에서 인수로 받는 depth의 의미 혹은 용도가 무엇인지?
2) 책 설명에 의하면 "사용완료 플래그를 설정해서 사용한 나라 이름을 제외해 나갔다고 하는데" 이게 무슨 말인지 모르겠습니다.
3) "is_last" 라는 변수가 앞의 for 문, if 문에서 "False" 값을 집어넣었는데...뒤의 if 문에서 "True" 라고 하는데..왜 이런 로직이 적용되는지?
4) max_depth는 글로벌 변수로만 선언되었다가 depth와 비교해서 retrun 한다는 의미가 무엇인지?

상기 책을 사서 직접 타이핑해서 이해해보려고 하는데...잘 이해가 안되서...삼가 질문 올립니다.

bach7kim 39

M 2021년 11월 26일 12:12 오후

목록으로