알고리즘이란?특정 작업을 수행하기 위한 프로세스 또는 일련의 단계. 즉, 우리가 알고리즘 문제를 푼다는 것은 특정 작업을 위한 프로세스를 수립하는 일이 된다. 예를 들자면, 두 수를 덧셈하라는 문제(작업) 를 받았다고 가정해보자. 그렇다면 두 자리를 덧셈하는 함수를 만들고, 결과값을 반환하는 과정이 프로세스일 것이다. 알고리즘 문제를 해결하기 위해서는 어떻게 해야할까? 1. 문제 해결을 위한 계획을 수립문제에 접근하는 방법, 문제를 세분화하기 위한 전략2. 일반적인 문제 해결 패턴을 파악많은 알고리즘들, 특히 면접에서의 많은 문제들을 여러 범주로 나눌 수 있는데, 일부 범주를 식별할 수 있는 경우에는, 도움이 될 몇 가지 조합법을 확보하여 문제 해결을 용이하게 할 수 있다.이 글에서는 우선 문제 해결 계..
기본적인 JS의 자료구조에 Big-O를 적용해 성능을 평가해본다. 내부에서 어떻게 작동하는 지는 자세히 다루지 않는다. 여기에서 중요한 것은, 배열과 객체를 사용한 코드에서 작업할 때, 얼마나 시간이 걸리는 지 파악하는 것이다.즉 Big-O의 시간복잡도를 적용한 성능을 알아보자.객체의 성능 평가// 예시 객체let student = { name: "yujin", favoriteAnimal: "fish", favoriteNumbers: [4,4,4]}삽입 - O(1)제거 - O(1)탐색 - O(N)접근 - O(1)객체는 정렬되어 있지 않다. 따라서 값을 삽입하거나, 제거하고 접근할 때는 키나 값을 지정하는 상수값만이 필요하다.그러나 탐색의 경우에는 어떨까?탐색이란 무엇일까? 탐색이란. 어떤 특정한 정..

Big-O 표기법은, '좋은', '그저 그런', '엉망인' 등의 주관적인 표현법 대신, 숫자로 코드의 성능을 표기할 수 있다.때로는 코드가 작동하기만 하면 충분하다고 생각할 수 있지만, 우리가 정량화된 측정도구인 Big-O 표기법을 사용하는 이유는 무엇일까?Big-O 표기법의 필요성수천개의 데이터가 있는 큰 데이터셋을 다룰 때, 한 알고리즘이 다른 알고리즘보다 실행하는데 한시간이 더 빠르다면 성능을 중요시 해야한다.해결책이 만족스럽다고 해도, 다른 해결책과 비교하고 성능이 어떤지 이해하는 것은 성장에 도움이 된다.여러 접근법의 장단점을 얘기할 때도 유용하다. 어떤 해결책은 많은 데이터량을 잘 다룰 수 있고, 다른 하나는 더 오랜 시간이 걸리지만, 데이터값이 달라질 때 변동량이 적을 수 있다.디버깅을 할 ..

코드를 짤 때면 재귀를 사용한 함수를 만날 때가 많은데, 조금만 복잡해도 이게 어떻게 동작했더라? 헷갈리는 경우가 많았다. 가장 단순한 예시(누산기)의 분석을 통해 재귀함수를 머릿속에 박아놓자.function sumUpTo(n) { // 종료 조건: n이 1이면 1을 반환 if (n === 1) { return 1; } // 현재 숫자 n을 더하고, 그 다음 숫자에 대해 재귀 호출 return n + sumUpTo(n - 1);}let result = sumUpTo(5); // 1부터 5까지의 합 구하기console.log(result); // 최종 결과 출력실행 흐름첫 번째 호출: sumUpTo(5)n = 5, return 5 + sumUpTo(4)을 호출. ..

버블 정렬이란?두 인접한 원소를 검사하여 정렬하는 알고리즘이다.버블 정렬은 기본적으로 배열의 두 수(a,b)를 선택한 뒤, 만약 그 두 수가 정렬되었다면 놔두고 아니라면 두 수를 바꾸는 방식으로 진행된다. 오름차순으로 정렬할 때는 a버블 정렬의 작동 과정인접한 원소들을 비교하여 크기 순서가 잘못되어 있으면 교환(swap)한다. 이 과정을 리스트가 정렬될 때까지 반복한다.1. 가장 큰 수인 6을 정확한 위치에 놓는다.검사횟수 n = 배열갯수 - 12. 가장 큰 수인 6을 맨 끝으로 고정하고 남은 노드들을 검사하여 두번째로 큰 5를 정확한 위치에 놓는다.검사횟수 n = 배열갯수 - 23. 조건에 맞게 정렬된 5, 6을 고정하고 남은 노드들을 검사하여 3번째로 큰 수를 정확한 위치에 놓는다.검사횟수 n = 배..