일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- programmers
- 코딩테스트
- docker
- IT
- Kakao
- 프로그래머스 #카카오 #IT #코딩테스트
- Python
- 자바
- Linux
- Spring
- 프로그래머스
- 운영체제
- Java
- DPDK
- 알고리즘
- 네트워크
- C
- 카카오
- 백엔드
- 도커
- 쿠버네티스
- 엘라스틱서치
- 개발자
- 스프링
- 캐시
- 리눅스
- Elasticsearch
- springboot
- 스프링부트
- 파이썬
- Today
- Total
저고데
[프로그래머스]네트워크 본문
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제를 간단하게 설명하자면 다음과 같다.
노드의 갯수를 나타내는 n이 주어지고 해당 노드가 어느 노드와 이어져있는지를 알려주는 배열인 computers가 주어진다. 이 때, 연결되어서 이어지는 무리는 몇 개인지를 반환하는 것이다.
예를 들어, a,b,c 3개의 노드가 주어졌을 때, a-b, c라면 총 무리가 두 개가 발생하므로 2를 반환하는 것이다.
코드를 작성하기 위한 순서는 다음과 같다.
1. 순회 여부를 알기 위해 n크기 만큼 모두 false를 넣은 visited 배열을 만들어준다.
2. DFS 함수에서 index값을 순회했으므로 visited[index]=True로 대입한다.
3. DFS 함수의 for문에서 스스로의 연결은 의미가 없기 때문에 스스로의 값이 1일 때는 제외하고 나머지는 1일 때를 판단하여 연결이 된 노드를 찾는다.
4. 해당 노드가 순회하지 않은 노드라면 DFS함수를 재귀하여 또 어떤 노드와 연결이 되어있는지 계속 반복한다.
5. DFS 재귀함수가 종료되었다면 이는 연결된 무리를 모두 순회한 것이기 때문에 무리가 하나 있는 것으로 판단하고 answer++를 해준다.
필자가 작성한 코드는 다음과 같다.
def dfs(index, visited, computers,n):
if index>n:
return
visited[index]=True #2번
for j in range(len(computers)):
if index!=j and computers[index][j]==1: #3번
if visited[j]==False: #4번
dfs(j, visited, computers,n)
def solution(n, computers):
answer = 0
visited=[False for _ in range(n)] #1번
for i in range(len(computers)):
if visited[i]==False:
dfs(i, visited, computers,n)
answer+=1 #5번
return answer
'프로그래머스' 카테고리의 다른 글
[프로그래머스]베스트앨범 (0) | 2023.01.15 |
---|---|
[프로그래머스]단어 변환 (0) | 2023.01.13 |
[프로그래머스]타겟 넘버 (0) | 2023.01.13 |
[프로그래머스]오픈채팅방 (0) | 2023.01.13 |
[프로그래머스]프린터 (0) | 2023.01.12 |