코린이의 소소한 공부노트

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

코딩테스트 풀이/JAVA

[LeetCode/Medium] 2149. Rearrange Array Elements by Sign

무지맘 2022. 8. 18. 16:40

1. Input

1) 길이가 짝수인 int 배열 nums

2) nums의 원소들은 양수 또는 음수

 

2. Output

1) 조건에 맞게 정렬된 int 배열

2) 새 배열을 만들어서 반환해도 상관없음

3) 배열은 양수로 시작해야 함

4) 인접한 원소들은 부호가 반대여야 함

5) 부호가 같은 숫자끼리의 순서는 바뀌면 안 됨

  - {1, -1, -3, 2}였다면 정렬 후 {1, -1, 2, -3}이어야 함

  - -1이 -3보다 크다고 더 오른쪽에 위치하는 게 아니라, 처음 그대로의 순서를 따라야 한다는 뜻

 

3. Constraint

1) 2 <= nums.length <= 2 * 105

2) nums.length는 짝수

3) 1 <= |nums[i]| <= 105

4) nums에 들어있는 양수와 음수의 개수는 똑같음

 

4. Example

Input: nums = {3,1,-2,-5,2,-4}
Output: {3,-2,1,-5,2,-4}
설명:
부호 별로 순서대로 숫자를 나열해보면 양수: {3,1,2}, 음수: {-2,-5,-4}

조건에 맞게 나열하면 {3,-2,1,-5,2,-4}만 답이 될 수 있음

{1,-2,2,-5,3,-4}, {3,1,2,-2,-5,-4} 등은 1개 이상의 조건을 만족시키지 않으므로 답이 될 수 없음

 

5. Code

1) 첫 코드(2022/08/18)

List<Integer> neg = new ArrayList();
List<Integer> pos = new ArrayList();
for(int i=0 ; i<nums.length ; i++){
    if(nums[i]>0)
        pos.add(nums[i]);
    else
        neg.add(nums[i]);
}
for(int i=0 ; i<nums.length/2 ; i++){
    nums[2*i] = pos.get(i);
    nums[2*i+1] = neg.get(i);
}
return nums;

  - 양수와 음수를 구분한 후 짝수 인덱스에 양수를, 홀수 인덱스에 음수를 넣음