넘치게 채우기

[LeetCode] 2149. Rearrange Array Elements by Sign 본문

PS/LeetCode

[LeetCode] 2149. Rearrange Array Elements by Sign

riveroverflow 2024. 2. 14. 11:14
728x90
반응형

https://leetcode.com/problems/rearrange-array-elements-by-sign/description/

 

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

Leetcode - Rearrange Array Elements by Sign

문제 유형 : 구현

문제 난이도 : Medium

 

 

문제

You are given a 0-indexed integer array nums of even length consisting of an equal number of positive and negative integers.

You should rearrange the elements of nums such that the modified array follows the given conditions:

  1. Every consecutive pair of integers have opposite signs.
  2. For all integers with the same sign, the order in which they were present in nums is preserved.
  3. The rearranged array begins with a positive integer.

Return the modified array after rearranging the elements to satisfy the aforementioned conditions.

 

정수 배열 nums가 주어진다. 짝수 길이이고, 똑같은 개수의 양의 정수와 음의 정수가 있다.

nums를 아래 조건에 맞게 재배치하시오:

  1. 연이은 수들은 서로 부호가 정반대여야 한다.
  2. 같은 부로끼리는 순서가 보존되어야 한다.
  3. 양수로 시작해야 한다.

재배치한 배열을 반환하시오.

 

풀이

n의 길이의 정수 배열을 하나 만든다.

양수 인덱스를 가리키는 정수를 0, 음수 인덱스를 가리키는 정수를 1로 표시한다.

nums를 순차적으로 순회하면서, 요소가 양수인지 음수인지에 따라서 각각 가리키는 인덱스에 넣는다. 넣고 나서는 2를 추가시켜서 다음 양수/음수 인덱스로 가리키게 한다.

 

코드

C++

class Solution {
public:
    vector<int> rearrangeArray(vector<int>& nums) {
        const int n = nums.size();
        vector<int> arr(n);
        int nextPositive = 0;
        int nextNegative = 1;
        for(int i = 0; i < n; i++) {
            if(nums[i] > 0) {
                arr[nextPositive] = nums[i];
                nextPositive +=2;
            } else {
                arr[nextNegative] = nums[i];
                nextNegative += 2;
            }
        }

        return arr;
    }
};

 

Go

func rearrangeArray(nums []int) []int {
    n := len(nums)
    arr := make([]int, n)
    positive := 0
    negative := 1

    for _, v := range nums {
        if v > 0 {
            arr[positive] = v
            positive += 2
        } else {
            arr[negative] = v
            negative += 2
        }
    }

    return arr
}
728x90
반응형