1번 문제_하노이의 탑

recursive function - tower of Hanoi

"하노이 탑" 문제를 해결하는 파이썬 함수를 작성하세요.

하노이의 탑(Tower of Hanoi)은 퍼즐의 일종이다. 세 개의 기둥과 이 기둥에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대로 쌓여 있다. 게임의 목적은 다음 두 가지 조건을 만족시키면서, 한 기둥에 꽂힌 원판들을 그 순서 그대로 다른 기둥으로 옮겨서 다시 쌓는 것이다.

  1. 한 번에 하나의 원판만 옮길 수 있다.
  2. 큰 원판이 작은 원판 위에 있어서는 안 된다.

In [1]:
def get_tower_of_hanoi_solution(height, from_tower, to_tower, helper_tower):
    pass

get_tower_of_hanoi_solution(3, "A", "B", "C") A 에서 B 로 1 번째 원판을 옮깁니다. A 에서 C 로 2 번째 원판을 옮깁니다. B 에서 C 로 1 번째 원판을 옮깁니다. A 에서 B 로 3 번째 원판을 옮깁니다. C 에서 A 로 1 번째 원판을 옮깁니다. C 에서 B 로 2 번째 원판을 옮깁니다. A 에서 B 로 1 번째 원판을 옮깁니다.


In [2]:
def hanoi(height, from_tower, to_tower, helper_tower):
    if height >= 1:
        # 1. n-1 개를 from 에서 helper로 옮긴다.
        hanoi(height-1, from_tower, helper_tower, to_tower)
        
        #2. n번째 마지막 원판을from에서 to로 옮긴다.
        print("{from_tower}에서 {to_tower}{height}번째 원판을 이동한다".format(
            from_tower = from_tower,
            to_tower = to_tower,
            height = height,
        ))
        
        #3. n-1개를 helper에서 to로 옮긴다.
        hanoi(height-1, helper_tower, to_tower, from_tower)

In [5]:
hanoi(3, "A", "B", "C")


A에서 B로 1번째 원판을 이동한다
A에서 C로 2번째 원판을 이동한다
B에서 C로 1번째 원판을 이동한다
A에서 B로 3번째 원판을 이동한다
C에서 A로 1번째 원판을 이동한다
C에서 B로 2번째 원판을 이동한다
A에서 B로 1번째 원판을 이동한다

2번 문제_피보나치킨 문제

치킨을 먹을 인원 수를 입력하면, 적절한 치킨 수를 출력하는 함수를 구현하세요.

세상 만사 모든 것의 균형은 황금 비율에서 그 해답을 찾을 수 있고, 이를 수학적으로 풀어낸것이 바로 피보나치 수열이니라. 일찍이 선지자가 있어, 치킨과 피보나치 수열의 관계를 밝힌 자들이 있으니 그들의 끝을 모르는 탐구 정신과 널리 인간과 치킨을 이롭게 하려는 마음을 높이 사, 내 잠시 짬을 내어 허접한 코드질을 하였으니 이를 피보나치킨 계산기라고 부르도록 하겠다.

• 피보나치킨, http://fibonachicken.herokuapp.com/#

  • 사이트에 접속하여 어떠한 알고리즘이 사용되었는지 직접 파악해보자.

In [ ]:


In [ ]:


In [ ]:

3번 문제_calendar

년, 월 을 입력받아 달력을 출력하는 함수를 구현하세요. ( 2 가지 방법 이상 )

get_calendar(2016, 5) May 2016 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

  • 단, 어떠한 방법으로 구현하셔도 괜찮습니다.

In [ ]: