728x90
백준/프로그래머스 풀다보면서 얻은 Swift 꿀팁 정리
(다른 언어도 포함일 수도 ㅇㅇ)
1. 입력 받을 때 map { Int($0)! } 보다는 map { Int(String($0))! }이 더 빠르다.
let input = readLine()!.split(separator: " ").map { Int($0)! }
vs
let input = readLine()!.split(separator: " ").map { Int(String(($0))! }
2. 함수 단위로 코드를 실행하면 컴파일러 최적화 측면에서 더 효율적이다.
func solve() -> Int {
var N = Int(readLine()!)!
var crane = readLine()!.split(separator: " ").map { Int(String($0))! }.sorted(by: >)
var M = Int(readLine()!)!
var box = readLine()!.split(separator: " ").map { Int(String($0))! }.sorted(by: >)
var answer = 0
if box[0] > crane[0] {
return -1
}
while !box.isEmpty {
answer += 1
for i in 0..<crane.count {
for j in 0..<box.count {
if crane[i] >= box[j] {
box.remove(at: j)
break
}
}
}
}
return answer
}
print(solve())
위 코드를 함수로 감싸지 않고 제출하면 시간초과 뜨는데,
위처럼 함수로 감싸면 통과됨
-> G선생 피셜 (내일 운체 교수님께 여쭤보겠다)
함수로 감싸주었을 때 시간 초과가 해결된 것은 두 가지 가능성이 있습니다:
1. 코드의 초기화 부분과 실행 부분이 명확히 구분됨: 함수로 감싸면 변수의 스코프가 명확해지고,
실행 환경이 초기화되어 재실행시 이전 실행의 영향을 받지 않게 됩니다.
이는 특히 재귀 호출이나 여러 테스트 케이스를 처리할 때 중요할 수 있습니다.
2. 컴파일러 최적화
Swift 컴파일러는 함수 내부의 로컬 변수에 대해 더 효율적인 메모리 관리와 최적화를 수행할 수 있습니다.
함수 밖에서 실행될 때와 함수 내에서 실행될 때 성능 차이가 날 수 있는데,
이는 컴파일러가 함수의 컨텍스트를 활용해 더 나은 최적화를 수행할 수 있기 때문입니다.
따라서, 함수로 감싸는 것이 직접적인 시간 효율성을 향상시키는 것은 아니지만,
실행 환경의 초기화 및 컴파일러 최적화에서 이점을 얻을 수 있습니다.
참고 링크
백준 1092번 배 - SWIFT
문제 지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은
noguen.com
'Computer Science > Algorithm' 카테고리의 다른 글
Swift로 알고리즘 풀 때 알아둬야할 것들 (1) | 2024.07.01 |
---|---|
[프로그래머스] 미로 탈출 (Swift) (2) | 2024.03.17 |
[백준] 7576, 토마토 (Swift) (0) | 2024.02.13 |
[백준] 3151, 합이 0 (Swift) (2) | 2024.01.27 |
[백준] 2644, 촌수계산(C++, BFS) (0) | 2023.09.02 |