본문 바로가기

알고리즘

(24)
재귀함수에 대한 분석! 재귀함수는 코드를 단순화하기 위해서 사용하는것이다. 마지막 ending condition 하나만 function 앞부분에 지정해두고, 같은 내용의 function 을 argument를 바꾸어서 계속 돌리는 것이다.어떤부분의 code 가 반복된느지 확인하고, 어떤 ending 조건이 있는지 확인해라. dp 의 경우에는 계산식이 3-4가지라서 if 문이 몇개 더들어가긴 하지만.. 재귀함수는 나를 항상 어렵게 만든다. DFS DP 모든 재귀함수는 이해하기 어렵고 복잡하다. 그래서 나는 이것을 공식화하고 싶었다. 어떤 어려운 세상문제이던지 파훼법은 있기 때문이다. 재귀를 작성할때 헷갈리는 것들이 있다. - while 을 써야하는지 IF를 써야하는지, - while 을 써야하는지 for 를 써야하는지. - ret..
순열과 조합 직접 개발하기 with yield 간단방법 def combi(arr,r): for i in range(len(arr)): if r == 1: yield [arr[i]] else: for next in combi(arr[i+1:],r-1):#뒤의것 yield [arr[i]]+next def permu(array, r): for i in range(len(array)): if r == 1: yield [array[i]] else: for next in permu(array[:i]+array[i+1:], r-1): #뺀것 yield [array[i]] + next
런타임에러가 발생하는 여러가지 이유들 요약! 배열에 할당된 크기를 넘어서 접근했을 때 전역 배열의 크기가 메모리 제한을 초과할 때 지역 배열의 크기가 스택 크기 제한을 넘어갈 때 0으로 나눌 떄 라이브러리에서 예외를 발생시켰을 때 재귀 호출이 너무 깊어질 때 이미 해제된 메모리를 또 참조할 때 8. 프로그램(main 함수)이 0이 아닌 수를 반환했을 때
청소년 상어 dfs마다 deepcopy로 배열을 새롭게 가져갈 수 있도록했어야함 빼놓고 구현한것 물고기는 빈칸이동이 가능하다 상어가 이동하면 빈칸이 된다. 배열 회전 tmp = board[x][:-1] board[x] = [board[x][-1]]+tmp
SET 의시간복잡도 + permutation + combination a in SET 은 a in LISt 보다 시간복잡도가 O (n) > O (1) 로 줄어든다. 왜냐하면 해시테이블이 있기 때문이다. from itertools import permutation SETS = set(permutiaions('배열',갯수)) 이렇게하면 set배열이 생긴다. for set in SETS : 이렇게 사용하자.
90도 회전 A 배열을 90도 회전한다고 해보자. for tiem in zip(*A): tmp.append( item.reversed() ) A = copy. deepcopy(tmp)
아기상어 bfs가 진행되면서 , 첫 물고기를 찾았을때까 최단 거리이다. 최단거리를 지정해 놓고, 남아있는 큐를 쭉돌면서, 최단거리보다 거리가 긴경우에는 더이상 넣어주지 않는다. 물고기를 만날때마다 리스트에 저장해주고, 그 리스트를 sorting 해서 (거리순, x축순 ,y축순) 가장 첫번쨰 원소를 먹어준다. 그리고 먹은위치에서 start 새로 해서 bfs() 를 돈다.
dictionary 키값 있는지 조회할 때 ( KeyError) if "찾는값" in dict1: