728x90
난이도 : Lv. 3
풀이일 : 2410185
https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제



아이디어
- 현재 컴퓨터가 네트워크에 연결되어 있는 지 확인할 boolean 타입의 check 배열을 생성
- 반복문을 돌며 현재 컴퓨터가 네트워크에 연결되어 있지 않다면, 현재 컴퓨터부터 연결된 것들 BFS 탐색
- 최종적으로 네트워크 개수 출력
풀이
import java.util.LinkedList;
import java.util.Queue;
class Solution {
public int solution(int n, int[][] computers) {
int answer = 0;
boolean[] check = new boolean[n];
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < n; i++) {
if (!check[i]) {
answer += 1;
queue.add(i);
while (!queue.isEmpty()) {
int x = queue.poll();
for (int nx = 0; nx < n; nx++) {
if (computers[x][nx] > 0 && !check[nx]) {
queue.add(nx);
check[nx] = true;
}
}
}
}
}
return answer;
}
}
- check : 각 컴퓨터의 네트워크 연결 여부 파악
- queue : 각 네트워크에 연결된 컴퓨터 파악에 사용할 큐
- 모든 컴퓨터의 개수만큼 반복하며, 현재 컴퓨터가 네트워크에 연결되어 있는지 파악
- 연결되어 있지 않다면, 현재 컴퓨터를 시작으로 네트워크 파악, answer + 1
- 연결되어 있지 않은 컴퓨터 번호를 queue에 추가
- queue에 남아있는 요소가 없을 때까지, computers 배열을 이용하여 현재 네트워크에 연결된 컴퓨터 파악
- computers 배열로 확인하여 현재 네트워크에 연결된 컴퓨터는 queue에 추가, check 재할당
- 반복문 종료 후 네트워크 개수 반환
느낀점
- 파이썬으로 BFS 문제를 좋아했어서 자바로도 쉽게 풀린다. 다만, 조건 설정에서 에러가 발생해서 코드를 쭉 작성하고 에러를 보며 고치는 시간을 가졌다.
- nx in computers[x] 이런 식으로 작성했다가 고친다던지, if (nx) 이런식으로 작성했다가 고치는 작업이 필요했다.
- 얼른 자바에 익숙해져야지
'알고리즘 > Lv. 3' 카테고리의 다른 글
프로그래머스 12904 가장 긴 팰린드롬 파이썬 풀이 (0) | 2024.11.07 |
---|---|
프로그래머스 43105 정수 삼각형 파이썬 풀이 (1) | 2024.11.05 |
프로그래머스 42628 이중우선순위큐 파이썬 풀이 (1) | 2024.10.29 |
프로그래머스 49189 가장 먼 노드 자바 풀이 (0) | 2024.10.21 |
프로그래머스 164668 조건에 맞는 사용자와 총 거래금액 조회하기 SQL (0) | 2024.10.16 |