[프로그래머스] 숫자 짝꿍 (JS)

hhkim·2023년 7월 10일
0

Algorithm - JavaScript

목록 보기
61/188
post-thumbnail

풀이 과정

  1. 길이가 10인 배열을 2개 만들고 0으로 초기화: Array().fill()
  2. 각 문자열을 배열로 변환 후 숫자의 개수 세기: forEach()
  3. 끝에서부터 두 배열을 비교해서 각 자리수의 작은 숫자만큼 문자열에 붙이기: Math.min(), repeat()
  4. 빈 문자열이면 '-1' 리턴
  5. '0'으로 시작하면 '0' 리턴

코드

function solution(X, Y) {
  const cntX = Array(10).fill(0);
  const cntY = Array(10).fill(0);
  [...X].forEach((n) => ++cntX[n]);
  [...Y].forEach((n) => ++cntY[n]);

  let result = '';
  for (let i = 9; i >= 0; --i) {
    if (cntX[i] === 0 || cntY[i] === 0) continue;
    result += String(i).repeat(Math.min(cntX[i], cntY[i]));
  }

  if (!result) return '-1';
  return result[0] === '0' ? '0' : result;
}

🦾

처음에 문자열 X 기준으로 반복하면서 안에서 includes()로 비교하는 방법을 썼는데 이건 시간복잡도가 O(n^2)이라 자꾸 시간 초과가 났다.
질문하기의 힌트를 참고해서 O(n)으로 열심히 최적화했더니 통과했다.
덕분에 생각보다 오래 걸렸다.
시간복잡도를 고려하는 연습을 계속 해야겠다.

0개의 댓글