[Swift] [68일차] 2149_LEET 배열정렬

·2025년 2월 13일
0

SwiftAlgorithm

목록 보기
71/105

2149. Rearrange Array Elements by Sign


문제 설명

  1. 배열이 주어짐 (음수와 양수 포함)
  2. 양수/음수 의 순서대로 배열을 완성
  3. 같은 부호간 순서는 지켜주기 !

문제풀이

  1. 그래서 일단 주어진 배열을 negative,positive배열에 각각 담아준뒤
  2. answer배열에 잘 담을 수 있게 cursor라는 튜플에 현재 각 부호 배열에서 몇번재를 꺼내야하는지를 기록해줬다.
  3. 이게 거꾸로 보든, 앞으로보든해서 pop이나 removeFirst같은 메소드쓰는거보다 효율적이라고 판단했기 때문!
  4. 더 빡세게 효율따질거면 각각 배열에 만들어주는거도 생략하게끔 해줄 수 있을 듯??
class Solution {
    func rearrangeArray(_ nums: [Int]) -> [Int] {
        var negative = [Int]()
        var positive = [Int]()
        var answer = [Int]()
        var cursor = (p: 0, n: 0)

        for num in nums {
            if num > 0 {
                positive.append(num)
            }
            else {
                negative.append(num)
            }
        }

        for i in 0 ..< nums.count {
            if i % 2 == 0 {
                answer.append(positive[cursor.p])
                cursor.p += 1
            }
            else {
                answer.append(negative[cursor.n])
                cursor.n += 1
            }
        }
        return answer
    }
}


타인의코드

class Solution {
    func rearrangeArray(_ nums: [Int]) -> [Int] {
        var pIndex = 0
        var nIndex = 1
        var newArray = Array(repeating: 0, count:  nums.count)
        for i in 0..<nums.count{
            if nums[i] >= 0{
                newArray[pIndex] = nums[i]
                pIndex += 2
            }else{
                newArray[nIndex] = nums[i]
                nIndex += 2
            }
        }
        return newArray
    }
}

예상한대로 각 배열에 넣어주는로직을 생략한것을 확인할 수 있었다.
그러면 이제 나는 연속으로 등장하는 같은 부호를 어떻게 처리하지? 였는데, 여기서 언급해줬듯이 짝수가 양수니까 여기나온대로 +=2 로 카운팅해주면 되는 것이었다.

profile
기억보단 기록을

0개의 댓글