배열의 빅오(Big o)
자료구조 | 알고리즘 2022. 11. 28. 20:53

1. 배열은 객체와 다르게 데이터가 정렬되어 있다. 2. 정렬되어 있는 것이 필요하다면 유용하지만 연산을 하는 시간이 조금 더 걸린다. 추가 - O(N) || O(1) 제거 - O(N) || O(1) 검색 - O(N) 접근 - O(1) 접근 접근은 객체와 동일한 O(1)이며, 추가와 제거는 유동적입니다. 배열 추가와 제거 const 예시 = ['코딩','자바스크립트','자료구조'] // 코딩 = 0 , 자바스크립트 = 1, 자료구조 = 2 배열은 각 엘리먼트마다 붙어 있는 index가 존재합니다. 예시에서 새로운 값을 push 한다면 객체와 다를것이 없는 O(1) 작업으로 상수 시간입니다. 코딩 = 0 , 자바스크립트 = 1, 자료구조 = 2의 인덱스 값의 변화 없이 새로운 값 = 3으로 생성됩니다. 문..

객체의 빅오(Big o)
자료구조 | 알고리즘 2022. 11. 25. 00:01

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를 찾는 것이 아니다,..

공간 복잡도
자료구조 | 알고리즘 2022. 11. 24. 12:47

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과 ..

[프로그래머스] 푸드 파이트 대회
코딩테스트 2022. 11. 15. 20:44

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..

[프로그래머스] 땅따먹기
코딩테스트 2022. 10. 25. 21:03

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++) { // 이중배열 반복문으로 각 행의 열 순회하며 이전 행의 최대값을 더해준다. 같은 열을 밟을수 없기때문에 필터를 사용..

[프로그래머스] 두 개 뽑아서 더하기
코딩테스트 2021. 4. 7. 22:06

https://programmers.co.kr/learn/courses/30/lessons/68644 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아return 하도록 solution 함수를 완성해주세요. function solution(numbers) { var answer = []; for(let i = 0; i < numbers.length; i++ ) { for(let q = 0; q < numbers.length; q++) { i !== q && answer.indexOf(numbers[i] + numbers[q]) === -1 && answer.push(numbers[i] + numb..

ES2021 (ES12)에서 추가되는 기능들!
JavaScript 2021. 2. 15. 21:19

ES2021에서 추가된 기능들 String.prototype.replaceAll Promise.any WeakRef Logical assignment operators Numeric separators ES12버전은 2021년 6월에 출시될 예정입니다. stage-0 부터 stage-4까지 단계를 거쳐 채택되는데 아래 기능들은 stage-4에 채택된 기능들이며 Google Chrome V8 엔진에 적용되어 바로 사용 할 수 있습니다. 그러나 아직 최종적으로 브라우저 업데이트가 된것이 아니기 때문에 코드에 적용 하면 곤란해집니다 ! 4 단계 목록은 tc39에서 확인 할 수 있습니다. 1. replaceAll (String.prototype.replaceAll) 기존에 문자열을 변경하기 위해서는 replac..