dfs 5

[BOJ][C++] 백준 2667번: 단지번호붙이기

문제https://www.acmicpc.net/problem/2667 문제 이해N × N 크기의 정사각형 지도에서 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다.집이 있는 곳(1)끼리 상하좌우로 연결시켜 단지를 만든다.총 단지수와 단지내 집의 수를 오름차순으로 출력한다. 문제 풀이 🔍 접근 집이 존재하는 곳을 기준으로 그 집의 상하좌우에 또 다른 집이 존재하는지를 판단하는 그래프 탐색 문제로 볼 수 있다.지도를 순회하면서 '1'이 나왔을 때 모든 인접 정점을 방문하여 연결된 집의 개수를 구한다.  🔨 구현 BFS와 DFS를 이용하여 풀 수 있다.방문 표기는 visited 배열을 만드는 대신 지도에서 방문한 곳을 '0'으로 바꾸어 표기할 수 있다.집이 있는 곳에서 dr, dc 배열을 이용해서 상..

[BOJ][C++] 백준 15650번: N과 M (2)

문제https://www.acmicpc.net/problem/15650 문제 이해1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열을 출력한다.고른 수열은 오름차순이어야 한다. 문제 풀이💡 DFS를 이용한 백트래킹 이전에 올린 N과 M (1) 문제에서, 출력할 수열이 오름차순인 것만 추가되었다. [BOJ][C++] 백준 15649번: N과 M (1)문제https://www.acmicpc.net/problem/15649 문제 이해1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열을 모두 구한다. 문제 풀이💡DFS를 이용한 백트래킹    1부터 N까지 재귀함수를 이용해 탐색하y-e-99.tistory.comN과 M (1)과 풀이 방식이 비슷한데, for 반복문에서 i값을 이용하면 중복없이 오름..

[BOJ][C++] 백준 15649번: N과 M (1)

문제https://www.acmicpc.net/problem/15649 문제 이해1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열을 모두 구한다. 문제 풀이💡DFS를 이용한 백트래킹    1부터 N까지 재귀함수를 이용해 탐색하며 중복 없이 M개의 수를 선택하고 출력한다.종료 조건: M개의 수를 모두 선택했을 때탐색- 1부터 N까지 탐색을 반복한다.- 수를 중복해서 선택하지 않도록 방문 표기한다.- 탐색한 수를 출력할 배열에 삽입한다.- 탐색이 끝난 수를 배열에서 제거하고 방문하지 않은 수로 표기한다.탐색 종료- 선택한 M개의 수가 담긴 배열을 출력 후 탐색을 종료한다. 코드#include#includeusing namespace std;int N, M;vector v;vector visited;..

[프로그래머스][C++] 네트워크

문제https://school.programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이💡 문제 접근한 컴퓨터와 연결된 다음 컴퓨터를 탐색하고, 그 다음 컴퓨터와 연결된 컴퓨터를 계속해서 탐색해 나간다.탐색 중 연결이 끊기면 하나의 네트워크가 완성된 것 = 네트워크 + 1💡 DFS, 재귀함수1번 컴퓨터와 연결되어 있는 컴퓨터를 탐색하기 위해 dfs 함수를 호출한다.1번 컴퓨터가 2번 컴퓨터와 연결되어 있는 것을 발견한다.2번 컴퓨터와 연결되어 있는 컴퓨터를 탐색하기 위해 df..

[프로그래머스][C++] 타겟 넘버

문제https://school.programmers.co.kr/learn/courses/30/lessons/43165 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr풀이💡 DFS, 재귀함수종료 조건: numbers 배열의 모든 수를 선택 완료다음 인덱스로 넘어가면서 + 또는 - 를 선택하여 연산한 값을 넘긴다. 코드#include #include using namespace std;int answer;void dfs(int idx, int sum, int target, vector &numbers) { if (idx == numbers.size()) {..