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 | 31 |
Tags
- 머신러닝
- deepseek
- NLP
- MySQL
- 논문리뷰
- 분산
- LLM
- 알고리즘
- GPT
- ChatGPT
- 프로그래머스
- dfs
- SQL
- ABAE
- outer join
- 연구
- paper review
- gpt1
- 가상환경
- 코딩테스트
- Bert
- 파이썬
- 그래프
- 백준
- 자연어처리
- Aspect
- transformer
- join
- leetcode
- SQL 첫걸음
Archives
- Today
- Total
huginn muninn
[백준] 11724 파이썬 - 연결 요소의 개수 본문
11724번: 연결 요소의 개수
첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어
www.acmicpc.net
실버 2!🥈
정점의 개수와 간선의 개수를 입력하고 간선의 양 끝점을 반복문으로 입력한다.
그리고 연결 요소(connected component)가 이해가 되지 않아서 그래프를 손으로 그려보고 나서 이해할 수 있었다.
<첫번째 예제>
#정점, 간선 개수
6 5
#간선을 이루는 쌍
1 2
2 5
5 1
3 4
4 6
-----
#출력
2

서로 연결되어 있는 요소가 2개이므로 출력이 2인 것.
즉, 탐색 후 한 요소를 탐색할 때마다 카운트해주면 된다.
그리고 python은 재귀 제한이 걸려 있어서 제한을 넘으면 런타임 에러를 일으킬 수 있다. 나도 답도 잘 나오는데 런타임 에러가 떠서 찾아보니 아래 코드처럼 sys.setrecursionlimit(10**7)을 입력해줘서 허용 범위를 넓혀줘야 한다고 한다.
import sys
sys.setrecursionlimit(10**7)
input = sys.stdin.readline
<완성 코드>
나는 인접 행렬이 아닌 인접 리스트로 구성한다음 문제를 풀었다.
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
N,M=map(int,input().split())
count=0
matrix=[[] for _ in range(N+1)]
visited=[0]*(N+1)
#인접리스트 채우기
for i in range(M):
a,b=map(int,input().split())
matrix[a].append(b)
matrix[b].append(a)
#dfs 함수
def dfs(v):
visited[v]=1
for i in matrix[v]:
if visited[i]==0:
dfs(i)
#요소 확인
for i in range(1,N+1):
if visited[i]==0:
dfs(i)
count+=1
print(count)'코딩테스트' 카테고리의 다른 글
| [프로그래머스] 타겟 넘버 파이썬 (0) | 2024.03.18 |
|---|---|
| [프로그래머스] 옹알이1 파이썬 (1) | 2023.10.09 |
| [백준] 2606 파이썬 - 바이러스 (0) | 2023.08.03 |
| [백준] 1388 바닥 장식 - 파이썬 (0) | 2023.07.27 |
| [백준] 1012 유기농 배추 - 파이썬 (0) | 2023.07.13 |