JavaScript/Basic
-
[JS 알고리즘&자료구조] 구체적 예제들JavaScript/Basic 2023. 10. 30. 23:50
앞서 학습했던 질문 5개를 다시 한번 살펴보도록 하자. 문제를 나만의 방식 혹은 나만의 언어로 제대로 이해했는가? (남에게 설명할 수 있을 정도로 이해해야 한다고 생각함) 문제가 어떤 입력값을 가지고 있는가? 문제에서 어떤 출력값이 나와야 하는가? 입력값이 출력값을 결정할 수 있는가? 문제에 등장하는 중요한 데이터를 뭐라고 명명할 것인가? 뭐라고 부를 것인가? 면접관이 질문을 던졌고 우리는 위의 질문들을 통해 질문을 열심히 이해한 상황이라고 가정해보자. 그 후에는 문제에 대한 여러 구체적인 예시들을 떠올려 보는 것이다. 예재를 통해 우리는 문제를 좀 더 잘 이해할 수 있고 나중에 문제에 대한 해결법을 적용시켜 해결법이 제대로 작동하는지 검사도 해볼 수 있다. 입력값과 출력값이 알맞게 나와야하기 때문이다...
-
[JS 알고리즘&자료구조] 문제의 이해JavaScript/Basic 2023. 10. 30. 23:23
개발자들에게 가장 중요한 것은 '문제 해결'이다. 문제 해결을 위해서는 단계별 지침을 통해 계획을 수립해야 할 필요가 있다. 계획을 수립한다고 해서 문제가 해결되는 것은 아니지만 계획을 수립하는 과정을 거치면서 자연스럽게 해결책이 나올 수 있다. 우선 첫 번째로 문제를 이해하는 단계부터 살펴보자. 우선 문제를 마주하게 되면 이해를 하는 게 제일 우선이다. 사람들은 문제가 나오면 빠르게 진행해야 한다는 생각 때문에 급하게 풀려는 경향을 가진다. (특히 프로그래밍에서 더욱 더🤣) 제대로 이해하지 않아도 진행이 되는 것도 맞다. 그러나 시작하기 전에 문제를 확실히 이해하는 것은 정말 중요하다. 이해를 위해 스스로 혹은 면접관에게 던져볼만한 질문들은 아래와 같다. 문제를 나만의 방식 혹은 나만의 언어로 제대로 ..
-
[JS 알고리즘&자료구조] 문제 해결법 소개JavaScript/Basic 2023. 10. 30. 23:00
알고리즘이란 무엇일까? 알고리즘은 특정 작업을 달성하기 위한 과정이나 일련의 단계를 말한다. 문제를 해결하기 위한 일련의 수학적 단계도 있고 혹은 특정한 광고를 추천하는 메타나 구글의 알고리즘 등도 존재한다. (수많은 개발자의 엄청난 노력이 들어갔을 것으로 추정되🙄) 그러나 결국 알고리즘은 어떤 작업을 달성하기 위한 일련의 단계에 불과하다. 우리는 이런 알고리즘을 왜 배워야만 할까? 프로그래밍을 통해 수행하는 모든 작업에는 그것이 단순하든 복잡하든 알고리즘이 포함되어야 한다. 특정 결과를 도출하기 위한 최적의 방법을 찾아야만 한다. 이처럼 알고리즘은 굉장히 중요하지만 이 강의에서는 알고리즘의 정의를 굉장히 좁게 가져가고자 한다. 우리가 이 강의를 통해 얻고자 하는 것은 인스타그램의 알고리즘을 분석하고 파..
-
[JS 알고리즘&자료구조] Big O 배열 메소드JavaScript/Basic 2023. 10. 30. 01:39
아래는 각각의 배열 메소드에 대한 Big O 표기법이다. push // O(1), 배열의 끝에 단순히 데이터와 인덱스를 추가 pop // O(1), 배열의 끝에 있는 데이터와 인덱스를 삭제 shift // O(N), 배열의 시작에 데이터를 추가하므로 뒤에 있는 데이터들의 인덱스 전부 수정 unshift // O(N), 배열의 시작에 있는 데이터를 삭제하므로 뒤에 있는 데이터들의 인덱스 전부 수정 concat // O(N), 두 개의 배열을 합친 다른 배열을 만듬 (배열들의 데이터들을 다른 배열로 복사) slice // O(N), 배열 일부 혹은 전체를 가져옴 (10개든 100개든 복사하는 것이므로) splice // O(N), 배열 시작, 중간 혹은 끝에 데이터를 추가 위에 언급된 메소드들 외에도 일반적..
-
[JS 알고리즘&자료구조] 배열 안의 데이터에 접근이 느린 이유JavaScript/Basic 2023. 10. 30. 01:15
배열은 데이터가 정렬이 된 상태로 존재하며 데이터들은 정렬되어 있는 기준이 있다. 정렬되어 있다는 것은 유용하지만, 연산을 하는 데에 시간을 더 소모할 수 있다. 배열은 대부분 정렬되어 있는 데이터를 위해서 사용한다. 섞여있는 데이터에도 정렬을 쓸 수도 있지만 성능을 위해 권장되는 방법은 아니다. 배열을 사용하는 것은 정렬에는 아주 좋은 방법일 수 있으나 사실 성능적으로는 이득이 아닐 수 있다. 특히 입력과 제거에 있어서 그렇다. 입력 : 그 때 그 때 다름 제거 : 그 때 그 때 다름 탐색 : O(N) 접근 : O(1) 배열에 있는 데이터에 접근하는 것은 굉장히 빠르다. 객체와 마찬가지로 접근은 O(1)의 상수 시간을 가진다. 배열의 특정 인덱스에 위치하는 데이터를 요청한다고 하면 어떤 사람들은 해당 ..
-
[JS 알고리즘&자료구조] 객체의 Big OJavaScript/Basic 2023. 10. 30. 00:54
우선 객체의 특성을 알아보는 것으로 시작하자. 정렬되어 있을 필요가 없을 때 잘 작동한다. 빠른 접근과 입력, 제거를 원할 때 사용한다. 앞에서 배웠던 것을 토대로 하면 빠르다는 것은 입력, 제거, 접근하는 시간이 상수 O(1) 이라는 것이다. 객체의 데이터에 접근하고, 객체의 데이터를 삭제하고, 객체에 무언가를 입력하는 것은 모두 상수 시간 O(1)으로 작동한다. 아래와 같다고 보면 되겠다. 위의 탐색은 접근과는 다른 개념이다. 접근은 객체의 Key로 데이터에 접근하는 것을 의미하는 것이며 탐색은 어떤 특정한 정보가 어떤 값에 있는지 확인하는 것을 뜻한다. 탐색을 위해서는 모든 Key의 데이터에 접근해서 내가 원하는 데이터가 존재하는 지 확인한다. 그 말은 객체 내에 데이터가 많을수록 시간이 더 많이 ..
-
[JS 알고리즘&자료구조] 로그와 이제까지의 요약JavaScript/Basic 2023. 10. 26. 23:12
로그를 학습해야만 하는 이유는 어떤 알고리즘들은 앞서 배웠던 O(1), O(n), O(n²)처럼 Big O가 간단하지 않기 때문이다. 😒 몇 가지 Big O 표기법들은 이와는 다르게 좀 더 어렵거나 흔하지 않은 수학 공식이 포함된 경우도 있다. 그 중 자주 나오는 개념이 로그이다. 우선 로그란 뭘까? 로그함수는 지수 함수의 역함이다. 나눗셈과 곱셈이 짝인 것처럼 로그 함수와 지수 함수는 짝이다. 아래의 수학식을 보자. log₂(8) = 3 위의 식은 "2의 몇승이 8이 되나요?"를 묻는다. log₂(값) = 지수 위의 로그 함를 정리하면 '2를 밑으로 하는 어떤 값의 로그는 어떤 지수값과 같다"라고 할 수 있다. 예시를 이진 로그로 들었다고 해서 항상 2가 들어가는 것은 아니다. 어떤 숫자든 들어갈 수 ..
-
[JS 알고리즘&자료구조] 공간 복잡도JavaScript/Basic 2023. 10. 26. 22:38
앞서 봐왔던 것들처럼 알고리즘이 얼마나 빨리 결과를 도출해내는 지를 보는 것은 '시간 복잡도'를 보는 것이다. 시간 복잡도는 입력 값과 실행 시간 간의 상관 관계를 나타낸다. 이제는 입력 값이 커질수록 알고리즘이 얼마나 많은 공간, 즉 메모리 차지하는지 살펴보는 '공간 복잡도'에 대하여 얘기해보겠다. 입력 값은 내가 어떤 것을 입력하느냐에 따라 무한대로 커질 수가 있다. 그렇기에 입력 값을 일단 제외하고 알고리즘 자체가 필요로 하는 공간을 '보조 공간 복잡도' 라는 말로 나타낸다. 공간 복잡도에서 중요한 것은 알고리즘 그 자체이다. 알고리즘 자체가 어떤 영향을 끼치는지 한 번 살펴보자. (참고로 공간 복잡도가 결국 보조 공간 복잡도를 나타내는 것이라고 봐도 무방하다) 공간 복잡도의 몇 가지 규칙을 살펴보..