push - O(1) pop - O(1) shift - O(N) unshift - O(N) concat - O(N) slice - O(N) splice - O(N) sort - O(N* log N) forEach , map, filter , reduce ..etc - O(N) push, pop , shift unshift는 이전 글에서 설명했기 때문에 생략하겠습니다. concat concat의 경우에는 여러 배열을 합쳐 줍니다. 결합할 배열이 커질수록, 끝에 붙일 배열의 크기 만큼 시간도 그만큼 늘어나기 때문에 O(N)입니다. slice slice는 배열의 일부를 가져오거나 전체를 가져올수 있습니다. 엘리먼트 갯수만큼 걸리는 시간이 소요되기 때문에 O(N)입니다. splice splice는 slice와 ..
1. 객체의 빅오 let user = { name: 'lee', isAdult: true, favorite: ['coding','riding'] }; 위 객체는 user라는 변수에 key, value 3가지를 저장하고 있다. 객체는 정렬되어 있을 필요가 없을때 잘 작동하며, 빠른 접근, 입력과 제거를 원할 때 좋다. 빠르다고 하면 얼마나 빠른가? 입력 - o(1) 제거 - o(1) 검색 - o(N) 접근 - o(1) 시작과 끝이 없기 때문에 어디에 새로운 객체를 입력해도 상관이 없다. 단지 key를 사용해서 추가하는 것이죠. 객체는 위와 같이 검색을 제외하고는 상수의 시간( o(1) )을 가집니다. 그러나 검색은 선형 시간( o(N) )입니다. 검색은 user.name과 같은 key를 찾는 것이 아니다,..
1. booleans, numbers, undefined, null은 자바스크립트에서 불변공간이다. 그렇기 때문에 입력의 크기와는 상관없이 숫자가 1이든 100000이든 모두 불변의 공간으로 여긴다. 2. 문자열은 o(n)의 공간이 필요하다. 3. reference타입, 배열과 객체도 대부분 o(n)이다. n은 배열의 길이나 객체의 키 갯수일 수 있다. 예시1) function sum(arr) { let total = 0; // 첫번째 숫자 공간 할당 for (let i = 0; i < arr.length; i++) { // i = 0; 두번째 숫자 공간 할당 total += arr[i]; } return total; } 이 함수는 배열을 받아 그 배열안에 있는 모든 값을 합하는 함수이다. total과 ..
function solution(n, arr1, arr2) { const result = arr1.reduce((acc,cur,index)=>{ const check = checkPosition( addZero(n,cur.toString(2)), addZero(n,arr2[index].toString(2)) ) return acc = [...acc,check ] },[]) return result; } // 이진수 변환후 반복문을 이용해 각자릿수를 비교해야하는데, // 자리수가 맞지 않는 경우가 존재하여 정해진 자리수만큼 0을 더해주는작업 const addZero = (n, string) => { for(let i = 0; i < n; i++){ if(string.length < n){ string = ..
function solution(food) { const reduceResult = food.reduce((acc,cur,index)=>{ // 0번째 인덱스는 항상 물이기때문에 예외처리 if(!index) return acc for(let i = 0; i < Math.floor(cur/2); i++){ // 절반을 나누고 반내림하여 두 사람이 나눌수 있는 갯수 도출 // 도출된 숫자만큼 반복문을 통하여 음식 번호를 스트링으로 추가 acc += index } return acc },'') // 한쪽을 구한뒤 중간에 물이 배치되고 리버스되는 형식이므로 완성된 텍스트를 배열 처리 , 리버스 후 합치기 return reduceResult + 0 + reduceResult.split('').reverse().j..
function solution(land) { // 열,길이,깊은복사 const column = 4; const temp = land.slice(); const tempLength = temp.length; // 1,2,3,5 1,2,3,5 1,2,3,5 // 5,6,7,8 -> 10,11,12,11 -> 10,11,12,11 // 4,3,2,1 4,3,2,1 16,15,13,13 // 이전의 행을 더하는 방법으로 작성, 0번째의 이전은 없으므로 1부터 시작 for (let i = 1; i < tempLength; i++) { for (let j = 0; j < column; j++) { // 이중배열 반복문으로 각 행의 열 순회하며 이전 행의 최대값을 더해준다. 같은 열을 밟을수 없기때문에 필터를 사용..
// https://school.programmers.co.kr/learn/courses/30/lessons/49993 function solution(skill, skill_trees) { // 배열로 비교하기 위한 배열화 작업 const split_skill = skill.split(''); const split_skill_trees = skill_trees.map(skillTree => skillTree.split('')); // skill에 존재 하지 않는 스킬은 순서와 상관없기 때문에 필터로 제거하여 스킬트리에 존재하는것만 남기기 const filterItem = split_skill_trees.map(skillTree => skillTree.filter(skill=> split_skill.in..
function solution(numbers, target) { // https://school.programmers.co.kr/learn/courses/30/lessons/43165 let 방법의수 = 0; // 0,0으로 시작하여 모든 경우의 수 탐색 재귀함수(0, 0); function 재귀함수 (인덱스, 합) { // 모든 index를 탐색 if( 인덱스 === numbers.length){ // index와 numbers 길이와 같아지면 종료한다 if(합 === target ){ // 합과 타겟과 동일하다면 방법의수 ++ 방법의수++ } // 탈출 return } // 해당 노드에서 +,-를 모두 실행한다. 재귀함수(인덱스+1, 합 + numbers[인덱스]); 재귀함수(인덱스+1, 합 - n..
function solution(citations) { //https://school.programmers.co.kr/learn/courses/30/lessons/42747#qna // 1. 논문을 많이 인용된 순으로 정렬 // 2. index와 citations 두 숫자를 비교하며 내려갑니다. // 3. 두 숫자가 같아지거나 citations가 index보다 더 작아지기 시작하는 직전의 숫자를 찾아냅니다 return citations.slice(0) .sort((a,b)=> b - a) .reduce((acc,cur,index,array)=> index < array[index] ? acc += 1 : acc,0) } 프로그래머스 문제를 이해하기 너무 어려워서 위키피아 설명을 참조했습니다. for문으로..
// https://school.programmers.co.kr/learn/courses/30/lessons/12981 function solution(n, words) { let answer; let playerNumber = 1; let turn = 1; const pastWords = []; for(let i = 0; i { return pastWord.substr(-1) === currentWord.substr(0,1) ? false : true } const checkOneWord = (string) => { return string.length === 1 ? true : false } const checkSameWord = (pastWords,word) => { return pastWords...
Comment