Algorithm/BFS&DFS 23

[Python] 백준 1600번 말이 되고픈 원숭이

문제https://www.acmicpc.net/problem/1600입력첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있는 곳으로는 이동할 수 없다. 시작점과 도착점은 항상 평지이다. W와 H는 1이상 200이하의 자연수이고, K는 0이상 30이하의 정수이다.출력 첫째 줄에 원숭이의 동작수의 최솟값을 출력한다. 시작점에서 도착점까지 갈 수 없는 경우엔 -1을 출력한다.입력 예제14 40 0 0 01 0 0 00 0 1 00 1 0 025 20 0 1 1 00 0 1 1 0출력 예제4-1 문제 풀이말의 움직임은 k번까지만 가능하므로 말과 원숭이의 움직임을 ..

Algorithm/BFS&DFS 2024.09.20

[Python] 백준 11567번 선진이의 겨울왕국

문제https://www.acmicpc.net/problem/11567입력첫 번째 줄은  두 개의 정수 n, m (1 ≤ n, m ≤ 500)이 주어진다. n은 격자에서 행의 개수를 의미하고, m은 열의 개수를 의미한다.다음 줄은 두개의 정수 r1과 c1 (1 ≤ r1 ≤ n, 1 ≤ c1 ≤ m)이 주어진다. 이는 선진이의 초기위치를 나타내고, 초기위치의 빙판길의 상태는 ‘X’로 주어진다.다음 줄은 두개의 정수 r2과 c2 (1 ≤ r2 ≤ n, 1 ≤ c2 ≤ m)가 주어진다. 이는 올라프가 만들어 놓은 탈출구의 위치를 나타내며, 초기 위치와 일치할 수도 있다.다음 n개의 줄에는 각각 m개의 문자로 이루어진 빙판길의 초기 상태가 주어진다. (손상된 얼음이면 'X'로 표시되고, 손상되지 않은 얼음은 '..

Algorithm/BFS&DFS 2024.08.28

[Python] 백준 2146번 다리 만들기

문제https://www.acmicpc.net/problem/2146입력 첫 줄에는 지도의 크기 N(100이하의 자연수)가 주어진다. 그 다음 N줄에는 N개의 숫자가 빈칸을 사이에 두고 주어지며, 0은 바다, 1은 육지를 나타낸다. 항상 두 개 이상의 섬이 있는 데이터만 입력으로 주어진다.출력첫째 줄에 가장 짧은 다리의 길이를 출력한다.입력 예제101 1 1 0 0 0 0 1 1 11 1 1 1 0 0 0 0 1 11 0 1 1 0 0 0 0 1 10 0 1 1 1 0 0 0 0 10 0 0 1 0 0 0 0 0 10 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 00 0 0 0 1 1 0 0 0 00 0 0 0 1 1 1 0 0 00 0 0 0 0 0 0 0 0 0출력 예제3문제 풀이B..

Algorithm/BFS&DFS 2024.08.27

[Python] 프로그래머스 미로 탈출

문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이레버까지 도달하는 데 걸리는 시간 + 레버부터 목적지까지 도달하는 데 걸리는 시간을 해야 하므로 bfs를 두 번 돌려야한다.bfs를 돌릴 때 시작지점과 도착지점이 모두 다르므로 인자로 넘겨서 큐에 넣고 탐색이후 한 개라도 도달 할 수 없는 경우가 있다면 -1, 목적지까지 도달 할 수 있다면 시간 반환코드from collections import deque# 상하좌우dy = [-1,1,0,0]dx = [0,0,-1,1]def solution(maps): # start 부터 end까지의 거..

Algorithm/BFS&DFS 2024.07.24

[Java] 백준 13165번 침투

문제 13565번: 침투 첫째 줄에는 격자의 크기를 나타내는 M (2 ≤ M ≤ 1,000) 과 N (2 ≤ N ≤ 1,000) 이 주어진다. M줄에 걸쳐서, N개의 0 또는 1 이 공백 없이 주어진다. 0은 전류가 잘 통하는 흰색, 1은 전류가 통하지 않 www.acmicpc.net 입력 첫째 줄에는 격자의 크기를 나타내는 M (2 ≤ M ≤ 1,000) 과 N (2 ≤ N ≤ 1,000) 이 주어진다. M줄에 걸쳐서, N개의 0 또는 1 이 공백 없이 주어진다. 0은 전류가 잘 통하는 흰색, 1은 전류가 통하지 않는 검은색 격자임을 뜻한다. 출력 바깥에서 흘려준 전류가 안쪽까지 잘 전달되면 YES를 출력한다. 그렇지 않으면 NO를 출력한다. 입력 예제 5 6 010101 010000 011101 10..

Algorithm/BFS&DFS 2023.11.02

[Python] 백준 1240번 노드사이의 거리

문제 1240번: 노드사이의 거리 첫째 줄에 노드의 개수 $N$과 거리를 알고 싶은 노드 쌍의 개수 $M$이 입력되고 다음 $N-1$개의 줄에 트리 상에 연결된 두 점과 거리를 입력받는다. 그 다음 줄에는 거리를 알고 싶은 $M$개의 노드 쌍 www.acmicpc.net 입력 첫째 줄에 노드의 개수 N과 거리를 알고 싶은 노드 쌍의 개수 M이 입력되고 다음 N - 1개의 줄에 트리 상에 연결된 두 점과 거리를 입력받는다. 그 다음 줄에는 거리를 알고 싶은 M개의 노드 쌍이 한 줄에 한 쌍씩 입력된다. 출력 M개의 줄에 차례대로 입력받은 두 노드 사이의 거리를 출력한다. 입력 예제 4 2 2 1 2 4 3 2 1 4 3 1 2 3 2 출력 예제 2 7 문제 풀이 인접리스트로 그래프를 만든 후, 가중치 값을..

Algorithm/BFS&DFS 2023.11.01

[Java] 백준 4179번 불!

문제 4179번: 불! 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문자 www.acmicpc.net 입력 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문자들은 다음을 뜻한다. #: 벽 .: 지나갈 수 있는 공간 J: 지훈이의 미로에서의 초기위치 (지나갈 수 있는 공간) F: 불이 난 공간 J는 입력에서 하나만 주어진다. 출력 지훈이가 불이 도달하기 전에 미로를 탈출 할 수 없..

Algorithm/BFS&DFS 2023.11.01

[Python] SWEA 2817번 부분 수열의 합

문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 재귀적으로 리스트의 각 값을 더해가면서 k값이 됐을 때 카운트 해 준다. 카운트 한 값을 형식에 맞게 출력한다. 코드 def find_k_val(index, num): # 더한 값이 k인 횟수를 세는 전역변수 global cnt # 재귀 종료조건 (인덱스 끝까지 탐색을 마친경우, 더한 값이 k인 경우) if num == k: cnt += 1 return if index == n: return # 값을 더하기 위해 현재 인덱스의 값 임시변수에 할당 tmp = array[index] find_k_val(index+1, num + tmp) # 현재 값에..

Algorithm/BFS&DFS 2023.05.15

[Python] SWEA 2814번 최장경로

문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 노드 수 만큼 dfs탐색을 진행하여, 재귀를 진행한 횟수를 세면 깊이를 알 수 있다. 출발 노드에서 모든 노드로 각각 탐색을 진행하고, 탐색 중 깊이가 이전 깊이보다 깊을 때 마다, max_val의 값을 갱신한다. 재귀를 마친 후, 다시 탐색을 진행해야 하므로 방문 리스트의 값을 다시 해제 한 후, 모든 탐색을 마쳤다면 max_val의 값을 리턴 후, 형식에 맞게 출력한다. 코드 def dfs(now, cnt): global max_val if max_val < cnt: max_val = cnt visited[now] = True for i in ..

Algorithm/BFS&DFS 2023.05.15

[Python] SWEA 5215번 햄버거 다이어트

문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 탐색하려는 최대 맛의 합을 전역변수로 놓고 dfs탐색을 진행하여, 인덱스 별 재료를 넣는 경우와, 넣지 않는 경우로 나눠서 탐색한다. dfs 탐색을 하면서, 최대 맛 값을 계산하기 위해 맛을 계산하는 임시 변수에 인덱스 별 맛 값을 더한 후, 그 값이 최대 맛 값을 저장해놓은 max_taste값보다 크다면 max_taste값을 갱신한다. 칼로리 값도 위와 같이 계산한 후, 재귀함수를 실행할 때 총 칼로리의 합이 제한 되어있는 칼로리 값보다 더 크다면 호출을 종료한다. 그 후 마지막인덱스까지 돌았다면 종료한다. 마지막 인덱스의 칼로리와 맛을 계산하면..

Algorithm/BFS&DFS 2023.05.13