[CodingTest] i를 제외한 배열 요소들의 곱


문제

정수 배열이 주어지면 인덱스 i에 해당하는 값 이외의 모든 값들의 곱인 배열을 구하여라.
보너스 : 나눗셈을 안쓰고 풀기

예시

[1,2,3] => [6,3,2]
[1,2,3,4,5 ] => [120, 60, 40, 30, 24]

나눗셈이 있는 풀이법

// 2n => O(n)
function solution(arr) {
  const max = arr.reduce((a,b)=>a*b); // n
  let answer = [];
  for(let el of arr) { // n + n
    answer.push(max/el)
  }
  return answer
}

나눗셈 없는 풀이법

// n^2 = N(n^2)
function solution(arr) {
  return arr.map(el => // n
    arr.reduce((a,b) => { // n
      return el == b ? a : a*b
    },1)
  )
}

느낀점

  • O(N2) 이외의 풀이법은 생각이 나지 않음.

답변 및 해설

function solution(arr) {
    // Generate prefix solution
    let prefix_products = []
    for(el of arr) {
      if (prefix_products.length > 0) prefix_products.push(prefix_products[prefix_products.length-1] * el)
      else prefix_products.push(el)
    }
    console.log("prefix_products : ", prefix_products)

    // Generate suffix solution
    let suffix_products = []
    for(el of [...arr].reverse()) {
      if(suffix_products.length > 0) suffix_products.push(suffix_products[suffix_products.length-1] * el)
      else suffix_products.push(el)
    }
    suffix_products = [...suffix_products].reverse();
    console.log("suffix_products : ", suffix_products)

    // Generate result
    let result = []
    for (let i=0; i<arr.length; i++) {
      if(i == 0) result.push(suffix_products[i + 1]) // 첫 엘리먼트
      else if (i == arr.length - 1) result.push(prefix_products[i - 1]) // 마지막 엘리먼트
      else result.push(prefix_products[i - 1] * suffix_products[i + 1])
    }
    console.log("result : ", result)
    return result
}

해결방법 : 루프를 돌면서 해당 인덱스(i)의 prefix(앞부분들)와 suffix(뒷부분들)의 값들을 구해서 곱하는 방법.

prefix는 i번째의 앞부분들의 수의 곱
suffix는 i번째의 뒷부분들의 수의 곱

result는 루프를 돌면서 i번째 앞부분들의 곱과 뒷부분들의 곱에 해당하는 element 값들 간의 곱

아이디어

  • n2이외의 방법을 위해 여러가지 n을 만들어 풀기.
  • i번째의 앞부분들의 곱과 뒷부분들의 곱에 해당하는 array추출.




2023

Flutter 맛보기 1

3 분 소요

직방 기술지원팀 기술공유 세미나 중 플러터를 소개한 내용입니다

Back to Top ↑

2022

Back to Top ↑

2019

[Tutorial] Storybook과 Bit을 활용한 UI 컴포넌트 관리(Workflow)

1 분 소요

회사에서 프론트엔드 개발원칙을 SFC(Single File Component)에서 UI 컴포넌트를 기준으로 CDD(Component Driven Development)를 진행하려고 한다. 그래서 체계적으로 관리하기위해 Storybook과 Bit을 도입해보고자 한다. 각각의 역할은 ...

[Workflow] 프론트엔드 개발조직을 위한 워크플로 설계

2 분 소요

작성 배경 회사의 작업구조를 페이지 중심 개발에서 UI 컴포넌트 중심 개발로 변경하면서 Workflow를 개선할만한 환경을 구성해야했다. 폐쇄망 기반에서 개발자간 UI 명세서 역할을 할 수 있는 Storybook과 그것을 공유할 Verdaccio라는 구축형 NPM Pri...

[ESlint & Prettier] 개발 관습 설정 in Visual Studio

1 분 소요

회사 프로젝트를 작업하기 전 프론트엔드 개발자들 간의 코드 규칙을 Eslint와 Prettier 설정을 맞춰 관리해가는 방향을 정했다. 아직 협업을 할 경우는 없지만 미래에 인수인계 받거나 협업을 진행할 경우 코드관습이 달라 고생할 경우를 대비하기로 했다. 설정은 작업을 진행하며 ...

[CodingTest] 2019-10-26 SQL문제

최대 1 분 소요

공부겸 코딩테스트 사이트에서 토요일 오전 10시에 백엔드 포지션 테스트를 해준다기에 참여해봤다. SQL문제가 나왔는데 더 좋은 답이 있는것 같아 나중에 기록해두고 수정해보기로 한다.

[CodingTest] 피보나치 수열

1 분 소요

문제 : 피보나치 수열 제 1항부터 입력한 자연수(N)까지의 피보나치 수열 항들의 합을 구하여라.

[Syntax] 새로 알게된 파이썬 문법 정리

최대 1 분 소요

chaning comparison 파이썬은 chaning comparison이라는 신기한 문법이 있다. 참고 if a < b and b < c : (...) 라는 구문이 if a < b < c : (...) 으로 연산된다. 직관적인 문법이 인상적. ...

[DataType] Map & Set

최대 1 분 소요

Set vs Array - 관련기사 Set 유일값들의 배열이 필요할때(distinct) 집합의 개념이 필요할때(차집합, 교집합 등등 자체 메서드들이 많음.) index가 필요 없을때 Array에서 중복값을 없앨때 => ...

Back to Top ↑

2018

SGIS-shpToGeojson

1 분 소요

SGIS에서 받은 지도데이터(.shp)를 geojson으로 변경하는 작업 내용

Back to Top ↑