너비 우선 탐색 23

[L3] 프로그래머스 아이템 줍기 C++ BFS, 좌표 확장

리뷰 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 2차원 좌표 평면에서 주어진 사각형의 테두리만 타서 목표에 도달하여 아이템을 줍는 문제선분을 타고 이동하는 문제는 대체로 좌표를 확장하여 문제를 푸는 것 같다.  전역 변수v : 이동한 좌표를 방문처리를 해주기 위한 정수형 배열, 최대 크기의 2배인 101 * 101로 초기화 한다.lst : 맵 정보를 초기화 하기 위한 정수형 배열, 크기는 상동dx, dy : 상하좌우 이동을 위한 방향 배열Pos : 너비 우선 탐색 시 현재 위치 정보와 소요 시간을 저장하는 구조체 함수1. bfsint bfs(int sx, int sy, int ex, int ey) ..

[L2] 프로그래머스 게임 맵 최단거리 C++ 너비 우선 탐색, BFS

리뷰 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 아주 기초적인 BFS 문제였다. 맵의 왼쪽 상단에서 오른쪽 하단으로 이동하고, 걸린 시간을 출력하는 문제  전역 변수dx, dy : 상하좌우 4방향으로 이동하기 위한 방향 배열v : BFS시 방문 처리 및 걸린 시간을 계산하기 위한 정수형 배열, 맵의 최대 크기인 100 * 100으로 초기화n, m : 맵의 행의 수 n, 맵의 열의 수 mPos : BFS시 현재 위치 정보를 저장하기 위한 구조체 함수1. bfsint bfs(const vector>& maps) 맵을 탐색하며 우측 하단으로 갈 수 있는지 여부와, 걸리는 시간을 리턴하는 함수구조체 Pos..

[L2] 프로그래머스 전력망을 둘로 나누기 C++ BFS, 완전 탐색, 브루트포스 알고리즘

리뷰 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 브루트포스 알고리즘으로 간선을 1개씩 지워가며 모든 경우의 그룹을 조회하여 그룹간 송신탑 개수의 차를 구하는 문제  전역 변수v : BFS시 방문배열로 사용하기 위한 정수형 배열 함수1. bfsint bfs(int node, const vector>& lst) 너비 우선 탐색을 통해 노드간 관계를 만들고, 각 노드에 방문 처리를 진행하는 함수매개 변수로 탐색을 시작할 노드 node와 인접 리스트 정보 lst를 입력받는다.정수형 큐 q를 초기화 하고 초깃값인 node를 push해준다.node를 방문 처리 해주고, 그룹간 송신탑의 개수 cnt 개수를 1로..

[G5] 백준 10472번 십자뒤집기 C++ 비트마스킹, BFS, 브루트포스 알고리즘

리뷰 3 * 3 도형을 반전시켜 모든 땅을 흰색으로 만드는 문제https://www.acmicpc.net/problem/10472 전역 변수tc, target : 테스트케이스의 개수tc, 각 테케마다 초기 도형의 비트 정보targetlst : 초기 맵 상태를 얻어올 문자열 배열, 3 * 3크기이므로 크기는 3이다.dx, dy : 비트 반전을 시킬 구간의 방향 배열, 상하좌우 및 제자리를 포함하여 총 5개이다.v : 비트마스킹 시 방문 여부를 저장할 배열 9개의 상태를 저장해야 하므로 2^9보다 크게 설정한다.Pos : 큐 내부에서 현재 비트정보와 변환 횟수를 저장하여 사용할 구조체 함수1. getTargetvoid getTarget() 테스트케이스에서 입력된 도형의 비트 정보를 target변수에 저장하기..

[D3] SWEA 22683번 나무 베기 C++ 다익스트라, 최단 경로

리뷰 백준의 벽부수고 이동하기 시리즈와 유사한 문제였다. SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com  전역 변수tc, n, k : 테스크 케이스의 개수 tc, 각 테케당 한 변의 개수 n, 각 테케당 나무를 벨 수 있는 횟수 ksx, sy, ex, ey : 각 테스트 케이스당 시작 및 도착 지점의 x, y좌표lst : 문자열로 이루어진 맵 정보, 최대 10 * 10의 크기이다.dx, dy : 상하좌우 이동시 사용할 방향 배열, 상우하좌 순으로 인덱싱이 되어 있다.Pos : 탐색을 할때 현재 정보에 대한 정보를 담을 구조체, 현재 위치, 방향, 자른 나무의 개수, 시간 정보가 있다. 우선순위 큐를 사용해 주어야..

[G4] 백준 1327번 소트 게임 C++ BFS, 해시, 너비 우선 탐색

리뷰 처음엔 정수를 활용하여 풀려고 했으나 로직짜는게 너무 더러워 질 것 같아서 문자열을 택했다.https://www.acmicpc.net/problem/1327 문제 풀이전역 변수n, k : 정수형 변수이다. 수열의 길이 n, 뒤집는 개수 kinput, s, e : 문자열 변수이다. 수열을 입력 받을 input, 최초 수열의 상태 s, 목표 수열의 상태 ev : 해시를 통한 방문처리를 진행할 unordered_map, 타입으로 초기화 해주었다.Now : BFS를 돌릴때 사용할 구조체, 현재 수열을 나타낼 문자열 cur과 뒤집은 횟수 정수t로 이루어져 있다. 함수1. Reversestring Reverse(string num, int index) 현재 문자열을 입력 받고, index부터 index + ..

[G1] 백준 13460번 구슬 탈출 2 C++ BFS, 구현, 시뮬레이션, 너비 우선 탐색

리뷰 설계를 하지 않고 무작정 덤볐다가 호되게 당한 문제, 구현과 시뮬레이션은 둘째치고 생각 못하고 있던 조건들이 많아서 애를 먹었다, 해당 문제를 풀기 전에 문제에 대한 조건을 한번 쭉 정리하는걸 추천한다.https://www.acmicpc.net/problem/13460 문제 풀이전역변수n, m : 2차원 맵 상 행과 열의 크기를 저장할 변수sx1, sy1, sx2, sy2 : 빨간색 구슬과 파란색 구슬의 x, y좌표를 저장할 변수lst : 맵 정보를 저장할 문자열 배열, 최대 크기가 10이므로 10만큼의 크기를 지정해 주었다.v : 방문 처리를 할 4차원 정수 배열, 각각의 요소에 sx1, sy1, sx2, sy2의 위치 저장, 맵의 크가보다 1크게 초기화dx, dy : 4방향 탐색을 위한 방향 배..

[G2] 백준 16946번 벽 부수고 이동하기 4 C++ BFS, FloodFill, 너비 우선 탐색

리뷰 일반적인 BFS를 사용하니 바로 시간 초과가 출력되었다!!벽을 의미하는 1을 보기 보단, 0부터 본 후에 1을 체크하는 방식이 효율적인 문제였다. 위에서부터 차례대로 group정보를 배열, 벡터, unordered_map을 사용하여 관리한 정보이다.배열이 시간은 가장 빠르고 벡터가 메모리 낭비가 덜 심하고 해시는 그닥 효율이 좋지 못했다.따라서 해당 문제는 벡터를 활용한 방법으로 설명하겠다.https://www.acmicpc.net/problem/16946 문제 풀이전역변수lst : 맵을 저장할 문자열 벡터group : 그룹의 면적을 저장할 벡터, 인덱싱을 위해 크기를 1을 가진 상태로 시작한다.groups : 그룹의 면적을 2D맵에 나타내기 위한 배열v : 방문을 체크하기 위한 배열, 사실상 gr..

[G2] 백준 1400번 화물차 C++ 다익스트라, 최단 경로, 구현

리뷰경로 상에 신호등이 있어 기다렸다가 움직여야 하는 최단 경로 문제, 다른 문제와 다른점은 신호등의 방향이 정해져 있어 교차로에 진입하는 경우를 잘 분배해 주어야 했다.https://www.acmicpc.net/problem/1400 문제 풀이행 범위n, 열 범위 m, 시작 좌표 sx, sy 도착 좌표 ex, ey, 방향 배열, 맵 정보 lst배열을 전역 변수로 세팅한다.우선 순위 큐에서 사용할 Pos구조체를 정의하고, compare함수도 넣어준다.신호등 정보를 받을 구조체 Light를 정의하고, 신호등 배열 lights를 60크기로 설정해 준다.main함수에서 무한루프를 실행하고 input함수에서 n, m이 0, 0이라면 while루프를 종료해 준다.input함수를 통해 n, m값을 받고 만약 n과 ..

백준 17142번 연구소 3 C++ DFS, BFS, 완전 탐색

리뷰 어렵다고 생각이 들진 않았는데 생각보다 엣지케이스가 많아서 오답이 많이 노출되었다... 후https://www.acmicpc.net/problem/17142 문제 풀이n과 m을 입력 받고 맵 정보를 초기화 한다. 만약 맵에 2가 존재한다면 Pos구조체 타입의 virus 벡터에 추가해 준다.입력을 다 받고 나서 length 변수에 virus의 크기를 저장해 주고 dfs를 실행해 준다.dfs를 통해 virus의 크기만큼의 반복을 돌며 중복이 없고 순서가 있는 탐색을 진행해 준다.기저조건은 level이 m이 도달했을 때이다, path 변수에 저장된 인덱스를 갖고 bfs를 실행해 준다.방문 배열부터 초기화 해준다, 이때 벽의 경우에는 미리 0으로 초기화 해주고 나머지는 -1로 초기화 해준다.path에 저장..

728x90