코딩테스트/DFS,BFS,플러드필 7

[DFS/BFS] (프로그래머스) 블록 이동하기 - 파이썬

링크: https://school.programmers.co.kr/learn/courses/30/lessons/60063✅ 벽을 1로 두르는 방식 => 시작좌표:(1,1), 끝좌표:(N,N)으로 됨 유의✅ visited를 set()으로 해야 조회 시간복잡도 O(1)✅ 모든 회전가능성을 염두에 두기 (안그럼 풀이시간 엄청 소요되버림)from collections import dequedef solution(board): N = len(board) new_board = [[1]*(N+2) for _ in range(N+2)] for i in range(N): for j in range(N): new_board[i+1][j+1]=board[i][j] ..

[DFS/BFS] (백준) 인구이동 - 파이썬

✅ 쓸데없는 checked함수를 만들었음 => DFS에서 이동이 일어났는지를 moved로 flag를 만들고 이후 이동이 없으면 끝내는 방식을 써야함 / checked함수만든이유? 확인은 해야한다고 생각해서 만들었는데 DFS에서 확인할 수 있다는 걸 놓친것 같음. 어떤 과정이 다른 과정에 포함될 수 있는지를 한번 더 생각해보자✅ path에 처음 자기자신이 포함이 되어야한다는 점과 그래서 이동이 일어나면 길이가 1보다 커야한다는 점을 놓침 => 자기자신도 넣어야하는 경우와 해당 기능과 연관된 기능을 한번 더 꼼꼼히 살펴보자✅ DFS에서 재귀오류가뜸 => stack을 활용하거나 BFS를 사용하거나하면됨. stack으로 DFS를 구현할 수 있다는 점이 신기했음✅ 예시가 하나밖에 없을때 얼른 하나 만들어서 확인해..

[DFS/BFS] 괄호변환 - 파이썬

링크: https://school.programmers.co.kr/learn/courses/30/lessons/60058✅ else일때도 문자열을 추가해줘야한다는걸 잊어서 헤맸다. 조건에 따라 달라지는 결과를 꼼꼼히 예상 하자✅ 문자열 replace를 해버려서 헤맸다 -> 인덱스를 기준으로 제거해야한다는걸 명심하자def divide(string): stack = [] stack.append(string[0]) u,v = string[0],"" for s in string[1:]: if stack[-1]==s: stack.append(s) u+=s else: stack.pop() u..