Skip to content

Commit f37c253

Browse files
committed
[Gold IV] Title: 거짓말, Time: 8 ms, Memory: 69108 KB -BaekjoonHub
1 parent 9827d8d commit f37c253

2 files changed

Lines changed: 37 additions & 32 deletions

File tree

백준/Gold/1043. 거짓말/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88

99
### 분류
1010

11-
자료 구조, 분리 집합, 그래프 이론, 그래프 탐색
11+
그래프 이론, 자료 구조, 그래프 탐색, 분리 집합
1212

1313
### 제출 일자
1414

15-
2025년 4월 4일 17:55:49
15+
2025년 8월 29일 15:10:37
1616

1717
### 문제 설명
1818

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,50 @@
11
let nm = readLine()!.split { $0 == " " }.map { Int(String($0))! },
22
n = nm[0],
33
m = nm[1]
4-
var knowPeepList = readLine()!.split { $0 == " " }.dropFirst().map { Int(String($0))! }
5-
let partyList = (0..<m).map { _ in readLine()!.split { $0 == " " }.dropFirst().map { Int(String($0))! } }
6-
var parentInfo = [Int](repeating: 0, count: n+1)
74

8-
(1...n).forEach { parentInfo[$0] = $0 }
5+
let knowPeeps = readLine()!.split { $0 == " " }.map { Int(String($0))! }
96

10-
var answer = 0
11-
func find(_ v: Int) -> Int {
12-
//0의 부모는 0이여서 및 조건문을 만족하지 않아 0을 반환함
13-
if parentInfo[v] != v {
14-
parentInfo[v] = find(parentInfo[v])
7+
var parent = Array(0...n)
8+
var parties = [[Int]]()
9+
var answer = m
10+
11+
if knowPeeps[0] != 0 {
12+
for i in 1..<(knowPeeps.count-1) {
13+
union(knowPeeps[i], knowPeeps[i+1])
1514
}
16-
return parentInfo[v]
17-
}
1815

19-
func union(_ v: Int, _ g: Int) {
20-
let v = find(v)
21-
let g = find(g)
22-
if v < g {
23-
parentInfo[g] = v
24-
} else {
25-
parentInfo[v] = g
16+
for _ in 0..<m {
17+
parties.append(readLine()!.split { $0 == " " }.map { Int(String($0))! })
2618
}
27-
}
2819

29-
knowPeepList.forEach { parentInfo[$0] = 0 }
20+
for i in 0..<m {
21+
for j in 1..<parties[i].count-1 {
22+
union(parties[i][j], parties[i][j+1])
23+
}
24+
}
3025

31-
for i in partyList.indices {
32-
for j in stride(from: 0, to: partyList[i].count-1, by: 1) {
33-
union(partyList[i][j], partyList[i][j+1])
26+
for i in 0..<m {
27+
if find(parties[i][1]) == find(knowPeeps[1]) {
28+
answer -= 1
29+
}
3430
}
3531
}
3632

37-
for i in partyList.indices {
38-
if let first = partyList[i].first {
39-
let parent = find(first)
40-
guard parent != 0 else { continue }
41-
answer += 1
42-
}
33+
print(answer)
34+
35+
func find(_ g: Int) -> Int {
36+
if parent[g] == g { return g }
37+
parent[g] = find(parent[g])
38+
39+
return parent[g]
4340
}
4441

45-
print(answer)
42+
func union(_ g: Int, _ v: Int) {
43+
var parentG = find(g)
44+
var parentV = find(v)
45+
46+
if parentV > parentG {
47+
swap(&parentG, &parentV)
48+
}
49+
parent[parentG] = parentV
50+
}

0 commit comments

Comments
 (0)