반응형
오랜만에 원인모를 TLE가 났다. 심지어 이번에는 100%에서 시간 초과가 났다...! 채점 현황을 보니까 Swift로 맞은 분이 딱 한 분 있었다. 그럼 또 내 코드 문제란 건데..ㅠㅠ
결론은 삼항 연산자를 if-else문으로 고쳐서 AC를 받았다. 여러 가지 실험을 해봤는데 삼항 연산자를 쓰는 것보다 if-else로 하는 것이 아주 조금 더 빨랐다. 이 미세한 차이로 TLE가 AC로 바뀌었다...... PS에서는 삼항 연산자도 맘대로 못쓰다니
아래는 실험해본 코드
import Foundation
func check(_ n: Int) -> Bool {
return n % 2 == 0
}
// 삼항연산자
let start = CFAbsoluteTimeGetCurrent()
var resultString = ""
for i in 0..<1_000_000 {
resultString.write("\(check(i) == check(i+1) ? "t" : "f")")
}
let end = CFAbsoluteTimeGetCurrent()
print(end - start) // 0.6643459796905518
// if-else
let start2 = CFAbsoluteTimeGetCurrent()
var resultString2 = ""
for i in 0..<1_000_000 {
if check(i) == check(i+1) {
resultString2.write("t")
} else {
resultString2.write("f")
}
}
let end2 = CFAbsoluteTimeGetCurrent()
print(end2 - start2) // 0.5896239280700684
import Foundation
var parent = [Int]()
var size = [Int]()
func initUnionFind(n: Int) {
parent = (0..<n).map{ $0 }
size = Array(repeating: 1, count: n)
}
func find(_ x: Int) -> Int {
if parent[x] == x { return x }
parent[x] = find(parent[x])
return parent[x]
}
func union(a: Int, b: Int) {
var pa = find(a), pb = find(b)
guard pa != pb else { return }
if size[pa] < size[pb] { swap(&pa, &pb) }
parent[pb] = pa
size[pa] += size[pb]
}
func isConnected(u: Int, v: Int) -> Int {
return find(u) == find(v) ? 1 : 0
}
var resultString = ""
let T = Int(readLine()!)!
for t in 1...T {
let n = Int(readLine()!)!
let k = Int(readLine()!)!
initUnionFind(n: n)
for _ in 0..<k {
let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
let a = input[0]
let b = input[1]
union(a: a, b: b)
}
let m = Int(readLine()!)!
resultString.write("Scenario \(t):\n")
for _ in 0..<m {
let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
let u = input[0]
let v = input[1]
if find(u) == find(v) { // 삼항연산자 대신 if-else 구문 사용
resultString.write("1\n")
} else {
resultString.write("0\n")
}
}
resultString.write("\n")
}
print(resultString)
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
백준 10993번 별 찍기 - 18 - 스위프트(Swift) 풀이 + 그림 설명 (0) | 2022.01.24 |
---|---|
백준 2448번 별 찍기 - 11 - 스위프트(Swift) 시간초과 해결 못함 (0) | 2022.01.24 |
백준 1043번 거짓말 - 스위프트(Swift) 풀이 (0) | 2022.01.24 |
백준 10830번 행렬 제곱 - 스위프트(Swift) 풀이 (0) | 2022.01.22 |
백준 9465번 스티커 - 스위프트(Swift) 풀이 (0) | 2022.01.22 |
댓글