977. Squares of a Sorted Array 풀이 - js

fgStudy·2022년 5월 31일
0

코딩테스트

목록 보기
33/69
post-thumbnail

해당 포스팅은 릿코드 977번 Squares of a Sorted Array 풀이를 다룬다. 문제 링크
코드는 javascript로 작성하였으며 투포인터 문제이다.


문제

Given an integer array nums sorted in non-decreasing order, return an array of the squares of each number sorted in non-decreasing order.

내림차순으로 정렬된 정수 배열이 주어지면 내림차순으로 정렬된 각 숫자의 제곱 배열을 반환하라.

  • 1 <= nums.length <= 10^4
  • -10^4 <= nums[i] <= 10^4
  • nums is sorted in non-decreasing order.

풀이

문제의 키 포인트는 nums의 원소들이 음수를 포함한다는 것이다.
배열 nums는 0을 기준으로 왼쪽으로는 음수, 오른쪽으로는 양수이다. 즉 0을 기준으로 왼쪽 or 오른쪽으로 갈수록 제곱값이 커진다.

따라서 왼쪽과 오른쪽에 포인터(각각 s, e)를 두고 배열의 맨 마지막 원소부터 채워가자. 두 포인터의 제곱값 중 큰 값을 배열의 원소로 넣고 포인터를 땡겨주면 된다.


전체 코드

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var sortedSquares = function(nums) {
  	// 새로운 배열 생성
    const sorted = new Array(nums.length).fill(0);
    // 투포인터 생성
  	let s = 0;
    let e = nums.length - 1;
    // 현재 채워넣을 배열의 원소 idx
  	let pos = nums.length - 1;
    
  	// 투포인터를 이용해 내림차순으로 정렬된 각 숫자의 제곱 배열 생성
    while (s <= e) {
        const start = nums[s] ** 2;
        const end = nums[e] ** 2;
      	if (start < end) {
            sorted[pos] = end;
            e -= 1;
        }
        else {
            sorted[pos] = start;
            s += 1;
        }
        pos -= 1;
    }
    return sorted;
};
profile
지식은 누가 origin인지 중요하지 않다.

0개의 댓글