Notice
Recent Posts
Recent Comments
Today
Total
01-10 22:06
Link
๊ด€๋ฆฌ ๋ฉ”๋‰ด

Partially Committed

[Algorithm] Sorted squared array ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋ณธ๋ฌธ

๐Ÿ”ฅ Algorithm || ๋ฌธ์ œํ’€์ด/PS

[Algorithm] Sorted squared array ๋ฐ˜ํ™˜ํ•˜๊ธฐ

WonderJay 2022. 10. 24. 10:22
728x90
๋ฐ˜์‘ํ˜•
SMALL

  ์˜ค๋Š˜์€ ๋ณด๋‹ค ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.  Ascending order ๋กœ ์ •๋ ฌ๋œ input array ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, Sorted Sqaured output array ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ๋Š” ๋ฌธ์ œ ์ƒํ™ฉ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด [1,2,3,4,5] ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด [1,4,9,16,25] ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ๋– ์˜ค๋ฅด๋Š” ๊ฒƒ์€ ๊ทธ๋ƒฅ input array ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ squared value ๋ฅผ ์›์†Œ๋กœ ๊ฐ€์ง€๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“  ๋‹ค์Œ sorting ํ•ด์„œ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•œ ๊ฒฝ์šฐ์—๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(NlogN) ์ด๊ณ  ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(N) ์ด๋‹ค.

#include <vector>
using namespace std;
// time :  O(NlogN)
// space : O(N)
vector<int> sortedSquaredArray(vector<int> array) {
  // Write your code here.
  vector<int> ans;
  for(auto ele : array){
    ans.push_back(ele*ele);
  }
  sort(ans.begin(), ans.end());
  return ans;
}

  ๋งŒ์•ฝ, ๋ฉด์ ‘๊ด€ ํ˜น์€ ๋ฌธ์ œ์ƒํ™ฉ์—์„œ ๋ณด๋‹ค ์ตœ์ ํ™”๋œ ํ’€์ด๋ฅผ ์š”๊ตฌํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ ๊นŒ? ๊ฐ€๋ น, ์ด ๋ฌธ์ œ๋ฅผ O(N) ์— ํ’€๋ผ๊ณ  ํ•œ๋‹ค๋ฉด? ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” output ์„ sorting ํ•˜๋Š” ๊ณผ์ •์—†์ด, input array ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ output array ์˜ ์ ์ ˆํ•œ position ์— squared value ๋ฅผ insert ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

  ์ด๋ฅผ ์œ„ํ•ด์„œ array ์˜ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ์˜๋ฏธํ•˜๋Š” left  = 0 ์™€ ๊ฐ€์žฅ ํฐ ์›์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ์˜๋ฏธํ•˜๋Š” right = array.size()-1 ์„ ์„ ์–ธํ•œ ๋‹ค์Œ array ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ array[left] ์™€ array[right] ์˜ ์ ˆ๋Œ“๊ฐ’์„ ๋น„๊ตํ•œ ๋’ค ๋” ํฐ ์›์†Œ์˜ ์ œ๊ณฑ์„ output array ์˜ ๋๋ถ€ํ„ฐ ์ฑ„์›Œ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N) ์ด๊ณ  ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(N) ์œผ๋กœ ๋ณด๋‹ค ์ตœ์ ํ™”๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

#include <vector>
using namespace std;
// time :  O(N)
// space : O(N)
vector<int> sortedSquaredArray(vector<int> array) {
  // Write your code here.
  vector<int> ans(array.size());
  int right = array.size()-1; int left = 0;
  for(int i = array.size()-1; i >= 0 ; i--){
    if(abs(array[left]) > abs(array[right])){
      ans[i] = array[left]*array[left];
      left++;
    }
    else{
      ans[i] = array[right]*array[right];
      right--;
    }
  }
  return ans;
}

https://github.com/versatile0010/AlgoExpert

 

728x90
๋ฐ˜์‘ํ˜•
LIST
Comments