iOS Dev/Swift 알고리즘 - 문제풀이
[BOJ/백준] Swift - 좌표 정렬하기 (11650), 좌표 정렬하기 2 (11651)
Lark.q
2025. 3. 12. 11:45
반응형
좌표 이름만 들어도
무서워하는 단계가 빨리 지나갔으면 좋겠어요..;
(무서움반 두근반)
좌표 정렬하기 (11650)
문제링크 : https://www.acmicpc.net/problem/11650
좌표를 정렬하는 문제 |
let n = Int(readLine()!)!
var coord: [(x: Int, y: Int)] = []
for _ in 0..<n {
let input = readLine()!.split(separator: " ").map { Int($0)! }
coord.append((input[0], input[1]))
}
coord.sort { $0.x == $1.x ? $0.y < $1.y : $0.x < $1.x }
for i in coord {
print(i.x, i.y)
}
튜플을 활용했고
고차함수 sort의 Bool을 판단하는 클로저를 사용했어요
마지막 for문은 forEach문으로 했을 때 264ms 였지만
for문으로 수정하니 260ms가 됐어요 ?
시간복잡도 : O(nlogn)
for문과 forEach문 성능 차이의 이유:
- 콜백 함수 호출 비용: forEach는 각 요소에 대해 콜백 함수를 호출하는데, 이때 함수 호출 비용이 추가됩니다. 반면, for문은 반복을 직접 제어하기 때문에 이런 비용이 적습니다.
- 최적화 차이: forEach는 내부적으로 함수 호출을 처리해야 하므로, 최적화가 덜될 수 있습니다. for문은 최적화가 더 잘 될 수 있는 경우가 많습니다.
따라서, forEach는 코드가 간결하고 가독성이 좋지만, 성능이 중요한 경우에는 for문이 더 빠를 수 있습니다.
그렇군요 ?
forEach는 배열 메서드, for는 루프 구조의 반복문.
좌표 정렬하기 2 (11651)
문제링크 : https://www.acmicpc.net/problem/11651
좌표를 다른 순서로 정렬하는 문제 |
let n = Int(readLine()!)!
var coord: [(x:Int, y:Int)] = []
for _ in 0..<n {
let input = readLine()!.split(separator: " ").map { Int($0)! }
coord.append((input[0], input[1]))
}
coord.sort { $0.y == $1.y ? $0.x < $1.x : $0.y < $1.y }
for i in coord {
print(i.x, i.y)
}
얜 for문이어도 264ms나오더라고요 ?
시간복잡도 : O(nlogn)
아마 데이터의 정렬 순서가
x 값을 먼저 정렬했느냐, y값을 먼저 정렬했느냐에 따라 늘어나는 것같아요?
반응형