알고리즘 algorithms10 [백준 2151 파이썬 Python] 거울설치 bfs는 visit여부만 체크해주면 된다. dfs처럼 다시 처음 상태로 복구할 필요가 없다. 그러므로 재귀보다는 while문이 깔끔한 듯 from collections import deque N = int(input()) dap = [] base_pan=[] visit_pan=[] door = [] for i in range(N) : temp_input = input() temp_base_pan=[] temp_visit_pan=[] for j in range(N) : if(temp_input[j]=='#') : door.append([i,j]) temp_base_pan.append(temp_input[j]) temp_visit_pan.append([N*N]*4) base_pan.append(temp_ba.. 2020. 10. 12. [백준 2529 Python 파이썬] 두동전 1. dfs, bfs, while, 재귀... 흐름의 기준을 무엇으로 잡느냐가 중요하다. 시간이 흐름의 기준인지... 큐/스택의 개수가 흐름의 기준인지 등 2. while이 간단해서 좋지만 재귀를 사용하는 것이 더 낫다. while로 했다가 재귀로 바꿔야할 경우 멘붕당한다. 나중에 while문 안에서 break 걸면 while 완전종료되고, 넣었다 뺐다 할때 원상복귀시키는 것도 힘들다. for문 안에 dfs,bfs 등 재귀를 넣고... 그 재귀함수 초반에 종료조건을 넣어주면 불필요한 for문 시, 함수타지 않는다. #처음코드 from collections import deque import sys sign_cnt = sys.stdin.readline(); sign_cnt = int(sign_cnt) si.. 2020. 9. 23. [백준 17822 Python 파이썬] 원판 돌리기 시웠다 히히 n, m, t = map(int, input().split()) base_pan = [] for i in range(n) : base_pan.append( list(map(int, input().split())) ) def run(base_pan) : for i in range(t) : x, d, k = map(int, input().split()) #몇번째판 배수, 시계/반시계, 몇칸돌릴지 rotate_cnt = 1 while ( x*rotate_cnt-1 < n ) : if(d==0) :#시계 for k_ in range(k) : base_pan[ x*rotate_cnt-1 ] = [base_pan[ x*rotate_cnt-1 ][-1]]+base_pan[ x*rotate_cnt-1 ][.. 2020. 9. 15. [백준 16197 Python 파이썬] 두 동전 느낀점 1. 1번) cnt>=10과 cnt>9는 차이가 크다. 정답여부 및 수행시간이 크게 다르다 2. 2번) dfs라고 해서 무조건 stack에 넣어야 하는 것은 아니다. 파라미터로 한번 넘겨주고 버리는 값을 사용했더니 메모리가 크게 줄었다. 3. 머리쓴다고 쓰잘데 없는 로직 넣지 말자^^. 1번)조건으로 & (min([99]+dap)=10)) : # 1번 return else : coin_1_x, coin_1_y = coin_1_que coin_2_x, coin_2_y = coin_2_que cnt = cnt+1 for i in range(4) : coin_1_x_t = coin_1_x+top_down[i] coin_1_y_t = coin_1_y+left_right[i] coin_2_x_t = coi.. 2020. 9. 15. 이전 1 2 다음