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
- 1300번
- 2166번
- 1043번
- 자바의 정석
- Design Patterns
- Design Pattern
- 클린코드
- 2206번
- 11286번
- 10830번
- springboot
- 11758번
- 백준
- 코딩테스트
- 코딩 테스트
- BOJ
- 9장
- 냄새와 휴리스틱
- java의 정석
- java
- Adapater Pattern
- Spring
- SerialDate 리펙터링
- 2156번
- 17장
- programmers
- 가장 긴 증가하는 부분 수열2
- DxTrace
- 프로그래머스
- Dxerr.h
Archives
- Today
- Total
Don't give up!
[프로그래머스] 네트워크 (java) 본문
코딩테스트 연습 - 네트워크 | 프로그래머스 (programmers.co.kr)
코딩테스트 연습 - 네트워크
네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있
programmers.co.kr
어떻게 생각하고 문제를 풀었는가?
연결된 네트워크의 수를 구하기 위해 DFS를 사용하였습니다.
0번 컴퓨터부터 네트워크에 연결되있지 않다면 새로운 네트워크에 추가하고, 연결 가능한 컴퓨터를 순회하면서 네트워크의 연결을 수행함으로서 네트워크의 수를 구할 수 있겠다고 생각하였습니다.
코드
import java.util.*;
class Solution {
public int solution(int n, int[][] computers) {
int answer = 0;
Stack<Integer> nodes = new Stack<>();
boolean[] visited = new boolean[n];
for(int i=0;i<n;i++){
if(visited[i]) continue;
answer++;
nodes.push(i);
while(!nodes.empty()){
int index = nodes.pop();
visited[index] = true;
for(int j=0;j<n;j++){
if(computers[index][j]>0 && !visited[j]) nodes.push(j);
}
}
}
return answer;
}
}
테스트를 통과하는 코드를 작성하였습니다.
Stack을 활용하여 DFS를 구현하였으며 네트워크로 연결되지 않은 컴퓨터들을 네트워크로 만들어 DFS를 반복한 횟수를 반환하여 문제를 해결하였습니다.
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 다단계 칫솔 판매(java) (0) | 2021.05.23 |
---|---|
[프로그래머스] 단어 변환 (java) (0) | 2021.05.21 |
[프로그래머스] 가장 먼 노드(java) (0) | 2021.05.18 |