BFS 12

[BFS, 그래프] 프로그래머스 lv3. 블록이동하기

문제 문제링크 로봇은 90도 회전하거나, 평행이동을 한다 한 번 이동할 때 시간이 1씩 증가한다 n,n에 도착했을 때의 시간을 구해라 아이디어 q에서 꺼내서 if 끝 : 횟수 out 이동 조건 맞으면 q에 (좌표, 횟수) 넣기 평행이동 회전 가로 => 세로 세로 => 가로 알고리즘, 시간복잡도 BFS 시간 복잡도 O(V+E)? 자료구조 q = [[x1,y1,x2,y2], 횟수] hist = [[x1,y1,x2,y2], [...], ...] # q에 들어갔던 좌표인지 확인, x1 y1 x2 y2 => 왼오상하 순서로 넣고 뺀다 함수 move : 이동후 좌표 리스트 반환 bfs : 큐돌기 ''' 회고 블록의 회전이 꽤나 까다로웠다. 블록 회전 부분을 for 반복문으로 하면 코드가 더 간결해질 거 같다. 회전..

[BFS, 파이썬] 2146. 다리만들기 (!!)

메모리 초과 ➔ 정답처리 ➔ 개선 분석한 차이점 메모리 초과 케이스 (1차코드) : 56번쯤 라인에 바다 & 거리값 입력 안되어있으면 지금까지 온 거리 +1 이랑 기존 입력값이랑 min 비교하는데, 안해도 됨.. . BFS가 어떤 식으로 전개되는지 잘 안그려진다. 이 조건이 2차 코드에서 왜 없어도 되는지 이해가 잘 안간다. BFS는 칸마다 최단거리로 채워진다는 특징 때문인듯, 이미 방문했으면 굳이 안채워도 되나봐 secChecked 라고 구획을 그린 그래프를 별도로 두고, 이거로 visited도 판단함.. 그래프가 커질수록 부하가 걸렸나 => 메모리 초과의 원인인 듯 정답처리 된 케이스 (2차코드) : 섬 입력받은 표에 그대로 구획을 표시한거로 활용하고, visited True False 로 접근해서 ..

[BFS, 파이썬] 백준 5427. 불 - hard

boj 5427. 불 시간 제한. 메모리 제한. 제출. 정답. 맞힌 사람. 정답 비율 1 초 256 MB 26130 6700 4287 23.505% 문제 상근이는 빈 공간과 벽으로 이루어진 건물에 갇혀있다. 건물의 일부에는 불이 났고, 상근이는 출구를 향해 뛰고 있다. 매 초마다, 불은 동서남북 방향으로 인접한 빈 공간으로 퍼져나간다. 벽에는 불이 붙지 않는다. 상근이는 동서남북 인접한 칸으로 이동할 수 있으며, 1초가 걸린다. 상근이는 벽을 통과할 수 없고, 불이 옮겨진 칸 또는 이제 불이 붙으려는 칸으로 이동할 수 없다. 상근이가 있는 칸에 불이 옮겨옴과 동시에 다른 칸으로 이동할 수 있다. 빌딩의 지도가 주어졌을 때, 얼마나 빨리 빌딩을 탈출할 수 있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄..

⚡️algorithm 2022.05.05

[BFS, 파이썬] 백준 5014. 스타트링크

문제 강호는 코딩 교육을 하는 스타트업 스타트링크에 지원했다. 오늘은 강호의 면접날이다. 하지만, 늦잠을 잔 강호는 스타트링크가 있는 건물에 늦게 도착하고 말았다. 스타트링크는 총 F층으로 이루어진 고층 건물에 사무실이 있고, 스타트링크가 있는 곳의 위치는 G층이다. 강호가 지금 있는 곳은 S층이고, 이제 엘리베이터를 타고 G층으로 이동하려고 한다. 보통 엘리베이터에는 어떤 층으로 이동할 수 있는 버튼이 있지만, 강호가 탄 엘리베이터는 버튼이 2개밖에 없다. U버튼은 위로 U층을 가는 버튼, D버튼은 아래로 D층을 가는 버튼이다. (만약, U층 위, 또는 D층 아래에 해당하는 층이 없을 때는, 엘리베이터는 움직이지 않는다) 강호가 G층에 도착하려면, 버튼을 적어도 몇 번 눌러야 하는지 구하는 프로그램을 ..

⚡️algorithm 2022.05.05

[BFS, 파이썬] 백준 1697. 숨바꼭질

문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오. 입력 첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다. 출력 수빈이가 동생을 찾는 가장 빠른 시간을 출력한다. 예제 입력 1 복사 5 17 예제 출력 1 복사 4 동생 찾으러 가는..

⚡️algorithm 2022.05.05

[BFS] 백준 7562. 나이트의 이동 (feat. 2차원 배열이동)

문제 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까? 입력 입력의 첫째 줄에는 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 체스판의 한 변의 길이 l(4 ≤ l ≤ 300)이 주어진다. 체스판의 크기는 l × l이다. 체스판의 각 칸은 두 수의 쌍 {0, ..., l-1} × {0, ..., l-1}로 나타낼 수 있다. 둘째 줄과 셋째 줄에는 나이트가 현재 있는 칸, 나이트가 이동하려고 하는 칸이 주어진다. 출력 각 테스트 케이스마다 나이트가 최소 몇 번만에 이동할 수 있는지 출력한다. 문제 요약 체스판 나이트..

카테고리 없음 2022.05.04

[BFS, 파이썬] 백준 2178. 미로탐색 (최단거리)

별도 함수없이 while queue로 푼다. 보통 최단거리 구하는 문제는 BFS 를 쓰더라..! 좌표가 경로를 벗어나지 않는 범위 내에서 1. 방문여부 확인, 2. 길이 맞는지 확인. 조건에 맞다면 방문여부 표시하고, 큐에 넣어서 다음 차례에 추가. 방문 여부를 확인할 때, 방문 여부에 (이전 방문에 +1 함으로써) 몇 번째 방문인지 적기. 결국 마지막 좌표(목적지) 입력시 몇 번째 방문인지(거리)가 나오게 됨. import sys sys.stdin = open('C:\\tech\\backjoon\\graph\\input4.txt','r') # 최단 거리 n,m = map(int, input().split()) graph = [list(map(int, input())) for _ in range(n)] ..

⚡️algorithm 2022.05.02

[DFS, BFS] 백준 2644. 촌수 (+ 간략하게 출력하기)

기본적인 DFS, BFS 문제인데, 아직 BFS가 익숙하지 않아서 BFS로 해봤다. 역시나 기본 프레임은 1260번이랑 비슷하다. import deque 쓰는 거랑 BFS함수 첫 줄에 deque 만들고 , while q : 로 하나씩 꺼내는 거 graph 만들 때 쌍방향으로 넣어주기 from collections import deque import sys sys.stdin = open('C:\\tech\\backjoon\\graph\\input.txt','r') input = sys.stdin.readline def BFS(node): q = deque() q.append(node) while q: node = q.popleft() for i in graph[node]: if visit2[i] == 0 ..

⚡️algorithm 2022.05.02