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 |
Tags
- 데보션영 3기
- 2748 자바
- 파이썬
- 28278 스택 2
- 10807 자바
- 자바 2164
- dfs
- 백준 2346 자바
- 2798 자바
- 티움투어
- 그리디
- 2164 자바
- 코딩테스트
- 10813 자바
- 백준
- IAM Identity Center
- 백준 28278 자바
- 자바 10866
- 자바 28278
- 1764 자바
- 자바 2346
- 백준 10866 자바
- 백준 1764 자바
- 10810 자바
- BFS
- 2346 풍선 터뜨리기
- 1010 자바
- 자바
- 자바 1003
- IAM 사용자
Archives
- Today
- Total
자두의 데브로그
[자바] 프로그래머스 네트워크 본문
https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이 문제를 왜 혼자 못풀었을까 .... 문제 푼 방법 설명해보겠다..
일단 visited를 하나 선언함으로써 연결된 컴퓨터 사이의 관게를 파악할 수 있도록 한다. 이후로 visited를 차례로 돌면서 네트워크가 다른 네트워크랑 연결되어있는지 확인하고, 만약 visited가 false면 일단 네트워크의 개수를 하나 증가시킨다. (연결되어있다면 dfs 내에서 visited에 해당하는 값을 true로 바꿀 거니까 본인에 대해서는 개수 추가) 그리고 나서 dfs에 들어가게 되는데 현재 방문한 네트워크에 대해서 visited를 true로 변경하고 0부터 computers의 원소 개수만큼 돌면서 visited의 값이 false면서 computers의 x, i 번째 원소가 1인 경우는 다시 dfs를 탐색한다.
이렇게 해줘야 연결된 값에 대해서는 dfs 내에서 visited를 true로 바꿔주고, 연결되지 않은 값은 다시 dfs 밖으로 나가서 main 함수의 for문 내부에서 다시 dfs로 탐색하게 된다.
lv3 치고는 어렵지 않은 문제였는데 스스로 못푼 게 아쉽다. 다시 풀어봐야지 ...^^
class Solution {
public static boolean[] visited;
public int solution(int n, int[][] computers) {
int answer = 0;
visited = new boolean[computers.length];
for(int i = 0; i < visited.length; i++){
if(!visited[i]){
answer++;
dfs(i, computers);
}
}
return answer;
}
public static void dfs(int x, int[][] computers){
visited[x] = true;
for(int i = 0; i < computers[x].length; i++){
if(!visited[i] && computers[x][i] == 1){
dfs(i, computers);
}
}
}
}
'코딩테스트 > Java' 카테고리의 다른 글
[자바] 프로그래머스 단어 변환 (0) | 2024.10.17 |
---|---|
[자바] 프로그래머스 게임 맵 최단거리 (1) | 2024.10.17 |
[자바] 프로그래머스 타겟 넘버 (0) | 2024.10.17 |
[자바] 백준 5568번 카드 놓기 (0) | 2024.10.17 |
[자바] 백준 18511번 큰 수 구성하기 (1) | 2024.10.17 |