문제풀이/DFS & BFS 33

[JAVA] [BFS] Pro 아이템 줍기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/87694?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 1. 좌표를 2배로 늘린다. (3,5) -> (3,6) 원래는 갈 수 없는 길인데 좌표이동으로는 갈 수 있는것 처럼 보이기 때문이다. 2. 테두리 만을 남기기 위해 사각형의 전체 영역을 true로 채운 후, 내부를 false로 다시 채운다 3. bfs를 통해 최단경로 탐색한다. 코드 import java.util.*; class Solution { public ..

[파이썬] [BFS] 백준 4179 불!

문제 https://www.acmicpc.net/problem/4179 4179번: 불! 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문자 www.acmicpc.net 코드 import sys from collections import deque input=sys.stdin.readline queue=deque() dx=[-1,1,0,0] dy=[0,0,-1,1] r,c=map(int, input().split()) graph=[list(input().rstrip()) for _ in range(r)] visited=[[0]*c for _ ..

[파이썬] [DFS] 백준 2668 숫자고르기

문제 https://www.acmicpc.net/problem/2668 2668번: 숫자고르기 세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절 www.acmicpc.net 코드 n=int(input()) graph=[[] for _ in range(n+1)] for i in range(1,n+1): t=int(input()) graph[i].append(t) answer=set() def dfs(first,second,num): #문제 그림의 첫번째 줄 first.add(num) #문제 그림의 두번째 줄 second.add(graph[num][0]..

[파이썬] [BFS] 백준 27211 도넛 행성

문제 https://www.acmicpc.net/problem/27211 27211번: 도넛 행성 준겸이는 $N \times M$칸으로 이루어진 도넛 모양의 행성에 살고 있다. 준겸이가 살고 있는 행성에는 위 그림처럼 격자 모양으로 줄이 그어져 있다. 행성의 각 칸은 숲으로 막혀 있거나, 지나갈 수 www.acmicpc.net 코드 import sys from collections import deque queue=deque() input=sys.stdin.readline n, m = map(int, input().split()) graph = [list(map(int, input().split())) for _ in range(n)] visited = [[False] * m for _ in range(..

@[파이썬] [DFS] 백준 2468 안전 영역

문제 https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 코드 import sys sys.setrecursionlimit(100000) n = int(input()) graph = [list(map(int, input().split())) for _ in range(n)] dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def dfs(r, c): visited[r][c] = 1 for i in range(4): nx = r + dx[i..

@[파이썬] [DFS] 백준 1012 유기농 배추

문제 https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 코드 import sys sys.setrecursionlimit(10000) t = int(input()) dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def dfs(r, c): visited[r][c] = 1 for i in range(4): nx = r + dx[i] ny = c + dy[i] if 0

@[파이썬] [BFS] 백준 2178 미로 탐색

문제 https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 코드 from collections import deque queue=deque() n,m=map(int, input().split()) graph=[list(map(int, list(input().rstrip()))) for _ in range(n)] visited=[[0]*m for _ in range(n)] dx=[0,0,-1,1] dy=[-1,1,0,0] queue.append([0,0]) while queue: x..

[파이썬] [DFS] 백준 1759 암호 만들기

문제 https://www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 코드 def dfs(i,len): if len == l: vo=0 co=0 for j in range(l): if result[j] in 'aeiou': vo += 1 else: co+=1 if vo>=1 and co>=2: print("".join(result)) return for m in range(i, c): if check[m]==0: result.append(array[m]) check..

[PyPy] [BFS] 백준 9019 DSLR

문제 https://www.acmicpc.net/problem/9019 9019번: DSLR 네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에 www.acmicpc.net 코드 import sys from collections import deque input = sys.stdin.readline t = int(input()) def bfs(a, b): queue = deque() queue.append([a, '']) while queue: c, d = queue.popleft() temp = (c * 2) % 10000 if temp == b:..

[PyPy] [DFS] 백준 15684 사다리 조작

문제 https://www.acmicpc.net/problem/15684 15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선 www.acmicpc.net 코드 n,m,h=map(int,input().split()) graph=[[False]*(n+1) for _ in range(h+1)] array=[] for _ in range(m): a,b=map(int, input().split()) graph[a][b]=True for i in range(1,h+1): for j in range(1,n): if not graph[i][j] and n..