반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

undefined

[백준] 11728 배열 합치기 - Node/Js 본문

Coding Test

[백준] 11728 배열 합치기 - Node/Js

JavaScripter 2022. 7. 29. 04:00
반응형

문제 설명

 

11728번: 배열 합치기

첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거

www.acmicpc.net

 


문제 풀이

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let input = [];
let N = 0;
let count = 0;

rl.on('line', function (line) {
  if (!count) {
    N = line
      .split(' ')
      .map((e) => +e)
      .reduce((a, c) => a + c);
  } else input.push(line.split(' ').map((e) => +e));
  count++;
}).on('close', function () {
  solution(input);
  process.exit();
});

const solution = (input) => {
  // 배열 디스트럭팅 arr1 arr2
  let [arr1, arr2] = input;
  // 포인터 i와 j 정의
  let i = 0;
  let j = 0;
  // answer 배열정의
  let answer = [];
  // N만큼 for루프 (N은 두 배열의 길이의 합)
  for (let k = 0; k < N; k++) {
    // 만약 arr1[i] || arr2[j]의 값이 false 일때 j가 아직 도달 하지 않았다면 arr2에 계속 푸시 j가 도달한 상태면 arr1에 푸시
    if (i === arr1.length || j === arr2.length) {
      j !== arr2.length ? answer.push(arr2[j++]) : answer.push(arr1[i++]);
      // 둘다 도달하지 않았을 때
    } else {
      // 만약 arr1[i] >= arr2[j] answer에 arr2[j++] 푸시 (같을 경우 어디서 넣어주나 상관 없음)
      if (arr1[i] >= arr2[j]) {
        answer.push(arr2[j++]);
        // 만약 arr1[i] < arr2[j] answer에 arr1[i++] 푸시
      } else {
        answer.push(arr1[i++]);
      }
    }
  }
  // answer리턴
  console.log(answer.join(' '));
};

시간복잡도 : O(n)

공간복잡도 : O(n)


배운 점

투포인터를 써보았다.

반응형
Comments