2149. Rearrange Array Elements by Sign
문제 설명
- 배열이 주어짐 (음수와 양수 포함)
- 양수/음수 의 순서대로 배열을 완성
- 같은 부호간 순서는 지켜주기 !
문제풀이
- 그래서 일단 주어진 배열을
negative
,positive
배열에 각각 담아준뒤answer
배열에 잘 담을 수 있게cursor
라는 튜플에 현재 각 부호 배열에서 몇번재를 꺼내야하는지를 기록해줬다.- 이게 거꾸로 보든, 앞으로보든해서
pop
이나removeFirst
같은 메소드쓰는거보다 효율적이라고 판단했기 때문!- 더 빡세게 효율따질거면 각각 배열에 만들어주는거도 생략하게끔 해줄 수 있을 듯??
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 로 카운팅해주면 되는 것이었다.