취업준비

[Do it! 자료구조, 알고리즘 Python] 5. 재귀알고리즘 본문

취업준비/코딩테스트

[Do it! 자료구조, 알고리즘 Python] 5. 재귀알고리즘

AI&U_99 2022. 3. 19. 17:56
#양의 정수n의 팩토리얼 구하기
>>> def factorial(n:int) -> int:
	if n>0:
		return n*factorial(n-1)
	else:
		return 1

	
>>> if __name__ == '__main__':
	n=int(input('출력할 팩토리얼값 입력해라:'))
	print(f'{n}의 팩토리얼은 {factorial(n)}입니다')

	
출력할 팩토리얼값 입력해라:23
23의 팩토리얼은 25852016738884976640000입니다

[Do it! 자료구조, 알고리즘 Python] 

#하노이의 탑 구현하기
>>> def move(no:int, x:int, y:int) -> None:
	if no>1:
		move(no-1, x, 6-x-y)
	print(f'원반[{no}]fmf {x}기둥에서 {y}기둥으로 옮긴다.')
	if no>1:
		move(no-1,6-x-y,y)

		
>>> print('하노이 탑 구현')
하노이 탑 구현
>>> n=int(input('원반개수입력:'))
원반개수입력:5
>>> move(n,1,3)
원반[1]fmf 1기둥에서 3기둥으로 옮긴다.
원반[2]fmf 1기둥에서 2기둥으로 옮긴다.
원반[1]fmf 3기둥에서 2기둥으로 옮긴다.
원반[3]fmf 1기둥에서 3기둥으로 옮긴다.
원반[1]fmf 2기둥에서 1기둥으로 옮긴다.
원반[2]fmf 2기둥에서 3기둥으로 옮긴다.
원반[1]fmf 1기둥에서 3기둥으로 옮긴다.
원반[4]fmf 1기둥에서 2기둥으로 옮긴다.
원반[1]fmf 3기둥에서 2기둥으로 옮긴다.
원반[2]fmf 3기둥에서 1기둥으로 옮긴다.
원반[1]fmf 2기둥에서 1기둥으로 옮긴다.
원반[3]fmf 3기둥에서 2기둥으로 옮긴다.
원반[1]fmf 1기둥에서 3기둥으로 옮긴다.
원반[2]fmf 1기둥에서 2기둥으로 옮긴다.
원반[1]fmf 3기둥에서 2기둥으로 옮긴다.
원반[5]fmf 1기둥에서 3기둥으로 옮긴다.
원반[1]fmf 2기둥에서 1기둥으로 옮긴다.
원반[2]fmf 2기둥에서 3기둥으로 옮긴다.
원반[1]fmf 1기둥에서 3기둥으로 옮긴다.
원반[3]fmf 2기둥에서 1기둥으로 옮긴다.
원반[1]fmf 3기둥에서 2기둥으로 옮긴다.
원반[2]fmf 3기둥에서 1기둥으로 옮긴다.
원반[1]fmf 2기둥에서 1기둥으로 옮긴다.
원반[4]fmf 2기둥에서 3기둥으로 옮긴다.
원반[1]fmf 1기둥에서 3기둥으로 옮긴다.
원반[2]fmf 1기둥에서 2기둥으로 옮긴다.
원반[1]fmf 3기둥에서 2기둥으로 옮긴다.
원반[3]fmf 1기둥에서 3기둥으로 옮긴다.
원반[1]fmf 2기둥에서 1기둥으로 옮긴다.
원반[2]fmf 2기둥에서 3기둥으로 옮긴다.
원반[1]fmf 1기둥에서 3기둥으로 옮긴다.
#8퀸 문제 알고리즘 구현
>>> pos = [0]*8
>>> flag_a = [False]*8
>>> flag_b = [False]*15
>>> flag_c = [False]*15
>>> def put() -> None:
	for j in range(8):
		for i in range(8):
			print('+' if pos[i]==j else'-', end='')
		print()
	print()

	
>>> def set(i:int) -> None:
	for j in range(8):
		if(	not flag_a[j]
			and not flag_b[i+j]
			and not flag_c[i-j+7]):
			pos[i]=j
			if i ==7:
				put()
			else:
				flag_a[j] = flag_b[i+j] = flag_c[i-j+7] = True
				set(i+1)
				flag_a[j]=flag_b[i+j]=flag_c[i-j+7]=False

				
>>> set(0)
+-------
------+-
----+---
-------+
-+------
---+----
-----+--
--+-----

+-------
------+-
---+----
-----+--
-------+
-+------
----+---
--+-----

+-------
-----+--
-------+
--+-----
------+-
---+----
-+------
----+---

(...생략...)