jun-wiki

View My GitHub Profile

Posts (Latest 10 updated) :
Read all

하노이도 동경이라 불렸다고 한다.

이니셜 V도 헛된 꿈은 아니란 사실이다.

동남아식 동경 꺽기 ON

두부 대신 반미(Anti-American아님, 음식이름임)를 배달할 듯하다.



아무튼 오늘은 재귀함수를 배우며 하노이탑에 관해 문제를 풀어보게 되었다.

혼자 힘으로 풀지는 못했다. 도저히 모르겠어서 말이다.

저리 간단한 코드로 구현가능하다는 점에서 재귀함수의 힘을 온몸으로 겪었다.

# 파이썬

def move(no, x, y) -> None:    # x = 시작 기둥
    if no > 1:                 # y = 목표 기둥
        move(no-1, x, 6-x-y)   # 6 - x - y = 중간 기둥
    print(x, y)
    if no > 1:
        move(no-1, 6-x-y, y)

number = int(input())
print((2**number)-1)

if number > 20:
    exit()
else:
    move(number, 1, 3)



재귀 씹새때문에 어지러워

몇가지 예제를 더 풀어보려 한다.

짜잉나 죽겠네

# 팩토리얼

def factorial(n):
    if n == 1:
        return n * factorial(n-1)

print(factorial(5))

얜 기초라서 바로 보인다



# 1~N까지의 모든 순열 출력

def permute(arr, chosen=[]):
    if not arr:               # 남은 숫자가 없으면
        print(chosen)         # 지금까지 고른 숫자들을 출력
        return
    for i in range(len(arr)): # 남아있는 수 중 하나 고르기
        permute(arr[:i] + arr[i+1:], chosen + [arr[i]])

permute([1, 2, 3], [])

이새끼 좀 이해 안됐는데
permute(arr[:i] + arr[i+1:], chosen + [arr[i]])
의 역할을 이해하니 할만했다.

permute([1,2,3], [])에서 하나씩 chosen=[]으로 옮겨간다.

꼬는 과정         

arr=[]이 되면 모든 순열 테스트 해본거니 출력으로 넘어간다.

푸는 과정     


# 헷갈리는 예시

def explore(level, N, path):
    if level == N:
        print(path)
        return
    for i in range(3):  # 0,1,2
        explore(level+1, N, path+[i])

explore(0, 3, [])

아우 씨발 계속 보다보니 머리 뜨겁네



바람 좀 쐐고 오니 이제 좀 머리가 돌아가네

자꾸 나가서 바람 쐐라는 이유가 있었군만

이 코드의 경우 길이가 N인 리스트를 출력한다. 헷갈린다더니 별 거 없다.