바위타는 두루미
문제 문자열이 주어졌을 때 모든 경우의 순열을 계산하는 메서드를 작성하라. 단, 문자는 중복되어 나타날 수 없다. 해결법 1. 첫 n-1개 문자의 순열을 이용해서 만들기 P(a1) = a1 P(a1a2) = a1a2, a2a1 P(a1a2a3) = a1a2a3, a1a3a2, a2a1a3, a2a3a1, a3a1a2, a3a2a1 다음 원소를 이전에 만든 순열들에 각 위치에 추가해주면 된다. def getPerms(str): if len(str) == 0 : return [""] permutations = [] first = str[0] words = getPerms(str[1:]) for word in words : for i in range(len(word)): permutations.append(w..
문제 전형적인 하노이타워에서는 크기가 서로 다른 N개의 원반을 세개의 기둥 중 아무 곳이나 옮길 수 있다. 초기에 원반의 크기가 맨 위에서부터 아래로 커지는 순서대로 쌓여있다. 그리고 문제에는 다음과 같은 제약 조건이 있다. 1. 원반을 한번에 하나만 옮길 수있다. 2. 맨 위에 있는 원반 하나를 다른 기둥으로 옮길 수 있다. 3. 원반은 자신보다 크기가 작은 디스크 위에 놓을 수 없다 . 스택을 사용하여 모든 원반을 첫번째 기둥에서 마지막 기둥으로 옮기는 프로그램을 작성하라 . 해결법 n=1 1. 원판1을 기둥1에서 기둥3으로 옮긴다 n=2 1. 원판1을 기둥 1에서 기둥 2로 옮긴다. 2. 원판2을 기둥 1에서 기둥 3로 옮긴다. 3. 원판 1을 기둥 2에서 기둥 3로 옮긴다. n=3 1. 원판1을 ..
문제 * 연산자를 사용하지 않고 양의 정수 두 개를 곱하는 재귀함수를 작성하라. 덧셈, 뺄셈, 비트 쉬프팅 연산을 사용할 수 있지만 사용횟수를 최소화해야한다. 접근법 곱셈은 격자판 안의 셀의 갯수와 같다고 볼 수 있다. 7*8은 7*8 격자판의 셀의 갯수를 세는 것과 같을 테니까 말이다. 그렇다면 셀의 갯수는 어떻게 샐 수 있을 까? 절반을 세고 이것을 곱절로 만들어 가는 과정을 재귀적으로 처리할 수 있을 것이다. def Solution(a, b): small = a if a1 side1 = minProduct(s, b) side2 = side1 if small%2==0 else minProduct(small-s, b) return side1 +side2 이 코드에도 minProduct가 반복적으로 호출..