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값을 먼저 정렬했느냐에 따라 늘어나는 것같아요?

 

 

 

 

 

반응형