[백준] 2636번 치즈 - python 파이썬
·
코딩테스트/백준
문제  이 문제를 처음 풀려고 했을 때는 너무 어렵게 느껴졌다. BFS로 풀어야되는 건 금방 알겠는데 어떻게 테두리 영역만 따로 구하고 테두리 영역중에서 구멍이랑 맞닿은 테두리 부분은 제외 해줘야할 지 감이 잘 안잡혔다.  하지만 이 문제는 생각을 조금만 다르게 해주면 금방 풀린다. 처음에는 치즈의 영역에 너무 집착 했는데 반대로 공기의 영역을 먼저 구해주면된다.  공기의 영역을 어떻게 구해주냐하면 가장자리는 항상 공기 부분이 되기 때문에 0,0 지점부터 BFS를 시작하여 인접한 부분중에 0인 부분만 방문해주면 된다. 그렇게 되면 구멍 부분을 제외한 공기부분이 전부 방문 처리 된다.   위 내용에 대한 그림 예시이다. 빨간색으로 칠한 부분이 전부 방문 처리 되게 된다. 이렇게 방문처리 해준 후 치즈가 있..
[백준] 3055 탈출 - python 파이썬
·
코딩테스트/백준
문제   이 문제는 어떤 알고리즘을 사용해야할 지는 쉽게 감이 잡히는데 조건이 많아서 이걸 다 충족하면서 구현하는게 까다로웠던 문제이다.특히 BFS를 활용하는데 이동대상이 하나가 아니다보니 이걸 변형하는걸 생각하는게 어려웠던 문제였던 것 같다. (사실 조금만 변형하면 되는 문제임에도 불구하고 처음으로 접해보다보니 고정관념에 사로잡혀 쉽게 생각해주지 못햇던 것 같다.)  일단 BFS 알고리즘을 활용하는데 이때 while문을 돌때 보통 하나의 대상에 대해서만 이동가능 좌표를 추가해줬다면 이 문제에서는 고슴도치의 이동 가능 좌표, 물의 이동가능 좌표를 같이 추가해주면 된다. 정답코드from collections import dequer,c = map(int, input().split())graph = [lis..
[백준] 2573번 빙산 -python 파이썬
·
코딩테스트/백준
문제  일단 이 문제를 보면 구현해야할 로직이 크게 두가지 이다.  1.  빙산 깎기2. 몇 덩어리인지 확인   이게 매 해마다 반복되고 종료조건이 충족되면 종료하도록 해주면 된다. 먼저 빙산깎기는 이중 for 문 으로 돌면서 값이 0이상인 곳에 들어가면 동서남북의 0의 개수를 구한 후 빙산을 깎아주면 된다  이때 이중 for문을 돌면서 순차적으로 각 칸의 값을 갱신하는데 이 값이 매해마다 달라지는 것이므로 같은 해에 변경된 값이 다른 좌표의 값에 영향을 줘서는 안된다.그래서 값을 갱신하기 전에 tmp에 빙산값을 받아서 갱신되지 않은 값을 기준으로 주변 0의 개수를 세도록 해주었다. 그런데 빙산의 값은 2차원 배열이므로 단순히 대입이 아니라 deepcopy를 사용해서 저장해주었다.  그리고 몇 덩어리인지..
[백준]14502번 연구소 BFS - python
·
코딩테스트/백준
문제  이 문제는 미로찾기 문제의 꽤 까다로운 응용 버전이였다.벽을 무조건 3개 세우는데 어디다 세워야 안전영역 크기가 최대가 될지 감이 전혀 안잡혔다.  그래서 생각한 것은 범위가 그렇게 크지 않기 때문에 벽을 3개 세우는 모든 경우의 수에서의 안전 영역을 확인해주면 된다.이때 주의 해야할 것은 2차원 배열은 단순 copy가 아닌 deepcopy라는 것을 해주어야 기존의 배열의 값에 영향을 주지 않으면서 복사를 할 수 있다.  import copytmp = deepcopy(graph)  안전영역의 개수를 확인하는 것은 기존에 BFS 미로찾기 방식과 동일하다.바이러스가 퍼질 수 있는 곳을 확인해서 퍼진 후에 안전영역의 개수를 세주면 된다. def bfs(): tmp = deepcopy(graph) ..