Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 파라메트릭 서치
- 백준 9465
- 너비우선탐색
- 프로그래머스
- cpp
- 프로그래머스C#
- horner
- 통계학
- 코딩테스트
- C++
- 선형대수학
- 알고리즘
- 백준 C#
- 프로그래머스 c#
- dp
- 이분탐색
- 문자열
- 입출력
- 수치해석
- 확률론
- C#
- horner algorithm
- BFS
- 9095 C++
- 확률
- 철자검사
- 백준
- C
- 통계
- 스티커 C++
Archives
- Today
- Total
HOIT_B
[ 프로그래머스 C++ ] 네트워크 - BFS로 해결 본문
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
bfs() 함수 코드
0번째 컴퓨터와 연결된 컴퓨터들을 큐에 넣는다.
큐 [ (0) ]
1번 컴퓨터와 연결된 컴퓨터를 큐에 넣는다.(방문하지 않는 컴터만)
큐 [ (1) ]
2번 컴퓨터와 연결된 컴퓨터를큐에 넣는다.
.
.
.
.
더이상 연결된 컴퓨터가 없을 때 answer++한다.
메인함수 ()
컴퓨터의 개수 만큼 반복
방문하지 않은 컴퓨터가 있다면
bfs()
없다면 반복문 끝
return answer
코드
#include <string>
#include <vector>
#include <queue>
using namespace std;
queue<int> q;
int visited[200]={0,};//방문여부 확인 0이면 X, 1이면 방문
vector<vector<int>> maps; //a<->b 연결
int cnt=0;
void bfs(int point,vector<vector<int>> computers) //point에서 부터 주변살피기
{
q.push(point);
while(!q.empty())
{
int now = q.front();
visited[now]=1;
q.pop();
for(int i=0; i<computers.size(); i++)
{
if(computers[now][i]==1 && visited[i]==0)
{
q.push(i);
}
}
}
cnt ++;
}
int solution(int n, vector<vector<int>> computers) {
for(int i=0; i<n; i++)
{
if(visited[i]==0)
{
bfs(i,computers);
}
}
return cnt;
}
처음에 visited를 vector<int>visited;이렇게 했다가 몇몇개에서 오류가 났다. (코드 실행 눌렀을 때는 문제 없었음)
그래서 int[최대] visited = {0,}으로 변경했다. 처음부터 크기를 정해주는게 좋지싶다.
깊이우선 탐색으로 풀 수 도 있지만 난 BFS가 편한것같다.
~끗~
728x90
'작고소중한 알고리즘 풀기' 카테고리의 다른 글
[ 백준 C++ ] 2170번 선 긋기 (0) | 2023.11.15 |
---|---|
[프로그래머스 C++] 아이템 줍기 ( BFS ) (0) | 2023.11.15 |
[백준 C++] 11050 이항 계수1 (0) | 2023.11.09 |
[백준 C++] 1012번 유기농 배추 (0) | 2023.11.03 |
[백준 C++] 2178번 미로 탐색 (0) | 2023.11.01 |
Comments