[Baekjoon]백준 7562 나이트의 이동(실버 1) - Python/C/C++
문제를 살펴보면 이번에는 한 칸씩만 이동한 것과 다르게 체스의 말로 움직이기 때문에 조금 어렵게 느껴질 수는 있으나 dx, dy 배열에서 말이 움직일 수 있는 위치만큼 지정해주면 이전 문제와 동일하다이전에는 dx = [-1, 1, 0, 0], dy = [0, 0, -1, 1]과 같이 지정해주었다면이번에는 dx = [-2, -2, -1, -1, 1, 1, 2, 2], dy = [1, -1, 2, -2, 2, -2, 1, -1]와 같이 지정해주면된다또한, 이번에도 행과 열로 계산이 이루어지기 때문에 x, y와 같은 index 계산에 헷갈리지 않도록 유의해야한다import sysfrom collections import dequeinput = sys.stdin.readlinedx = [-2, -2, -1, -..
더보기
[Baekjoon]백준 2178 미로 탐색(실버 1) - Python/C/C++
해당 문제를 살펴보면 서로 인접한 이동가능한 칸으로 이동하여 제일 왼쪽 위(0,0)에서제일 오른쪽 아래(n-1, m-1)로 이동하는 가장 적은 경우의 수를 출력하는 문제이다해당 문제의 경우 이전 문제에서 자주 사용하였던 DFS가 아니라 BFS를 사용하여 문제를 해결해야한다DFS는 한 방향으로 끝까지 탐색한 후 다른 경로를 찾아보기 때문에 최단 경로를 찾아야하는 해당 문제에서는 BFS를 사용해야한다 그에 맞게 적절히 코드를 수정하면 다음과 같다dx = [0, 0, -1, 1]dy = [-1, 1, 0, 0]def bfs(x, y): queue = deque([(x, y)]) while queue: x, y = queue.popleft() for i in range(4):..
더보기
[Baekjoon]백준 1012 유기농 배추(실버 2) - Python/C/C++
문제를 살펴보면 이전 문제(2667)는 총 몇개가 붙어있고, 붙어있는게 몇 묶음인지 물어보았다면이번에는 입력 자체도 여러번 가능하며 총 몇 묶음인지 확인하는 문제이다따라서, 이전 문제에서 사용한 dfs 함수에서 count 변수를 제거하여 dfs를 구현해야한다dx = [0, 0, -1, 1]dy = [-1, 1, 0, 0]def dfs(x, y): if x = width or y = length: return if field[y][x] == 1: field[y][x] = 0 for i in range(4): nx = x + dx[i] ny = y + dy[i] dfs(nx, ny)해당 함수를 사용하기..
더보기
[Baekjoon]백준 2667 단지번호붙이기(실버 1) - Python/C/C++
문제를 살펴보면 지도가 주어지고, 해당 지도에서 연결된 단지를 찾아 출력하는 문제이다.일단 위에서부터 지도를 확인하다가, 1을 발견하면 해당 위치로부터 연결된 모든 집을 탐색해야한다.문제 해결을 위해 DFS를 사용하기로 하였으며, 사용 과정에 있어서 스캔이 완료되면중복 검사의 가능성이 존재하므로 0으로 바꾸어주어야 중복 탐색을 막을 수 있다.DFS를 사용하기위해 dx, dy 배열을 선언하여 방향을 설정해준다이후 앞서 dfs 함수를 선언하고 탐색하였을때 1이 존재한다면 0으로 변환함과 동시에 count 변수에 값을 저장한다import sysinput = sys.stdin.readlinedx = [0, 0, -1, 1]dy = [-1, 1, 0, 0]def dfs(x, y): global count ..
더보기