728x90
https://school.programmers.co.kr/learn/courses/30/lessons/43162#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
처음 봤을 땐 행렬을 그대로 두고 그래프 순회로 풀 수 있을 것
이라고 생각해서 백준의
https://www.acmicpc.net/problem/4963
4963번: 섬의 개수
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도
www.acmicpc.net
와 같게 풀었다. 그러나 생각을 깊게 하지 않았으니 당연히 테스트 케이스만 맞고 채점 돌리니 무더기로 틀렸다. 하는 수 없이 트리를 구성하여 DFS하였다.
1. 벡터로 노드를 구성하고 각 벡터에 인접 노드를 넣는다.
2. DFS
유니온 파인드로도 풀 수 있다고 하는데 굳이..?
요즘 그래프 문제는 소홀 했는데 오랜만에 복습할 수 있었다.
#include <string>
#include <vector>
using namespace std;
vector<int> network[201];
bool check[201] = {false,};
int N;
void dfs(int here){
for(int i = 0; i < network[here].size(); i++){
if(check[network[here][i]] == false){
check[network[here][i]] = true;
dfs(network[here][i]);
}
}
}
int solution(int n, vector<vector<int>> computers) {
int answer = 0;
N = n;
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(i != j && computers[i][j] == 1){
network[i].push_back(j);
}
}
}
for(int i = 0; i < n; i++){
if(check[i] == false){
answer++;
dfs(i);
}
}
return answer;
}
'프로그래머스 풀이 > Lv 3' 카테고리의 다른 글
프로그래머스 - 숫자 게임 (C++) (1) | 2023.07.06 |
---|---|
프로그래머스 - 야근지수(C++) (0) | 2023.07.04 |
프로그래머스 - 최고의 집합(C++) (0) | 2023.05.07 |
프로그래머스 - 등굣길(C++) (0) | 2023.05.02 |
프로그래머스 - 징검다리 건너기(C++) (0) | 2023.05.01 |