본문 바로가기

the others24

01 Big O Notation ( in JavaScript ) Udemy | JavaScript Algorithms and Data Structures Masterclass 01 Big O Notation ● Big O Notation 이란 ?? 좋은 코드, 더 나은 코드란 무엇일까? 란 질문을 던졌을 때 우리는 3가지 정도를 고려해 볼 수 있다. 01 기존 코드보다 처리 속도가 더 빠른가? 02 기존 코드보다 메모리를 덜 잡아먹는가? 03 기존 코드보다 로직이 더 직관적인가? 1번 조건을 평가하기 위해 쓰이는 도구가 바로 Big O Notation이다. "시간 복잡도"라고 부르기도 한다. 알고리즘의 수행 시간을 분석할 때 이 시간 복잡도를 사용한다. 수행 시간은 실행 환경에 따라 다르게 측정되므로, 기본 연산의 실행 횟수로 수행 시간을 평가한다. Big O 표기법.. 2021. 9. 3.
자료구조 / 알고리즘 공부할 때 유의할 점 📍 공부하면서 스스로한테 지속적으로 던져야하는 질문들 자료구조 ✅ 자료 구조 안에 있는 데이터들의 순서가 보장이 되는가? ✅ 중복된 데이터가 들어갈 수 있는가? ✅ 검색할 때 얼마나 효율적인가? ✅ 내가 원하는 기능을 수행하기 위해 데이터를 수정해야할 때 얼마나 효율적인가? 알고리즘 ✅ Input(매개 변수)의 사이즈가 커질수록 O(n)은 어떻게 변화하는가? ✅ 작성한 코드의 시간 복잡도와 공간 복잡도는 어떠한가? ✅ 선택한 자료구조가 해당 알고리즘 문제를 풀기에 적절한가? 문제 푸는 skill 01 UNDERSTAND THE PROBLEM 02 CONCRETE EXAMPLES 03 BREAK IT DOWN 04 SOLVE OR SIMPLIFY 2021. 9. 1.
재귀함수 Recursion Achivement Goals ✅ 재귀의 의미에 대해서 이해하고, 자바스크립트에서 재귀 호출을 할 수 있다. ✅ 재귀를 언제 사용해야 하는지 알고 있다. ✅ 재귀적 사고 연습을 통해 재귀 함수를 base case와 recursive case로 나눠서 작성할 수 있다. ✅ 자료 구조 중 Tree 구조에 재귀 함수를 사용하는 이유를 이해할 수 있다. ✅ 실생활에 사용되는 유용한 Tree 구조를 알고 있다. ✅ 깊이를 알 수 없는 Tree 구조에 재귀 함수를 활용하여 모두 순회(traverse)할 수 있다. 📌 재귀란? 어떤 문제를 해결할 때, 동일한 구조의 더 작은 문제를 해결함으로써 주어진 문제를 해결하는 방법이다. --> 처음 접했을 때는 이게 무슨말이야 ...? 했는데 공부해보니까 알겠다. --> 코드.. 2021. 8. 30.
자바스크립트 프로그래머스 프린터 문제 풀이 📌 문제 ◾ 해설 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다. 내가 인쇄를 요청한 문서가 몇 번째로 인쇄.. 2021. 8. 24.
자바스크립트 Math.sqrt( ) 사용하지 않고 제곱근 구하기 📌 바빌로니아 방법 Babylonian method 여기서 Xn은 말 그대로 근사값이다. S에 루트를 씌운 값에 가장 가까울 거라 생각하는 근사값을 넣어주면 된다. 어떤 값을 넣든지 점화식을 반복하다보면 결국, Xn+1이 S의 제곱근에 근접하는 순간이 온다. (그치만 그게 언제일지는 보장못함) 📌 코드로 구현하기 ◾ 초기안 수도 코드 ◾ 코드 구현 값은 잘 나오는데 ... 구체적으로 코드가 어떻게 구동하는 지 궁금했다. ◾ 문제점 근사값이 점점 원래값의 제곱근에 가까워지는 걸 확인할 수 있었다. 그런데 ... 근사값은 결국 3.xxxxxxxxxxx 형식을 넘지 못한다. 그리고 9같이 제곱근이 정수로 떨어지는 숫자 이외의 값을 입력받으면 while문이 무한반복될게 뻔하다. 무한반복을 끊어줄 break문이 .. 2021. 8. 17.
[ 리눅스 삽질기 ] 패키지와 패키지 매니저 📌 패키지? 하나의 프로그램이 정상적으로 설치되고 동작하기 위한 모든 파일이 압축되어 있는 것. 🏁 프로그램 파일 🏁 프로그램 설치 파일 🏁 프로그램 설치 설명서 🏁 프로그램에 대한 정보를 담은 파일 ( ex. 프로그램A를 설치하기 위해서는 프로그램B가 필요하다 ) 📌 패키지 매니저? 패키지의 설치, 변경, 삭제 등 관리를 편하게 해주는 도구. 우린 하나의 프로그램만 사용하지 않는다. 여러개의 프로그램을 다운받아 다양하게 활용한다. 프로그램은 지속적으로 업데이트되는 특성을 가지고 있고, 이를 사용자가 관리해줘야한다. 프로그램 수가 늘어갈수록 우리가 기억해야할 프로그램 저장소의 위치와 개수 또한 늘어간다. 저장소에 직접 방문해서 업데이트를 해줘야하기 때문이다 !!! --> 이 단점을 보완하기 위한 도구가 .. 2021. 8. 3.
[ 리눅스 삽질기 ] CLI 텍스트 에디터는 뭘 써야할까? nano? Ubuntu 20.04.2 LTS 환경에서 실행되었습니다. 📌 왜 CLI 텍스트 에디터를 공부해야하나? 원격 서버 환경에서 원격으로 텍스트 파일을 편집해야하는 경우가 분명히 존재한다. 터미널에서 파일과 폴더를 자유자재로 다룰 수 있는 에디터 하나는 마련해놓는 게 좋다. 📌 왜 nano? vim(vi)나 emacs에 비해 진입장벽이 낮다. nano가 편하긴 한데, 뭔가 vim 잘하고싶다. ㅋㅋㅋㅋ ◾ 터미널에서 nano 명령어로 파일을 열어준다. 01 nano [파일명.확장자] 02 nano // 그냥 실행할 수도 있음 친절하게 밑에 명령어도 적어준다 ^!^ 나는 ... vim(vi) 도전한다 ! 2021. 8. 2.
[ 리눅스 삽질기 ] 리눅스 절대 경로와 상대 경로 Ubuntu 20.04.2 LTS 환경에서 실행되었습니다. 📌 절대 경로 기준점( 루트폴더 ' / ' )으로부터 파일이나 폴더의 절대적인 위치를 나타냄. // 절대 경로 /home/[username]/ // 절대 경로 진입 cd /home/[username]/ 📌 상대 경로 현재 위치를 기준점으로 파일이나 폴더의 위치를 나타냄. // 상대 경로 ./[user.name] // 상대 경로 진입 cd ./[user.name] // 현재 폴더 아래에 있는 [user.name] 폴더로 진입하는 명령어 cd ../[폴더명] // 현재폴더의 상위 폴더에 있는 [폴더명] 폴더로 진입하는 명령어 // . :현재폴더 // .. :상위폴더 // / :폴더 내부 📌 사용자 권한과 관리자 권한 Ubuntu를 처음 설치할 때 입.. 2021. 8. 2.
[ 리눅스 삽질기 ] 리눅스 터미널 명령어를 이해해보자 Ubuntu 20.04.2 LTS 환경에서 실행되었습니다. 📌 Achivement Goals ✅ 리눅스 터미널을 실행할 수 있다. ✅ CLI를 이용한 작업과 GUI를 이용한 작업이 동일함을 이해할 수 있다. ✅ 리눅스 터미널에서 기본적인 명령어를 사용할 수 있다. ✅ 명령어를 사용할 때, 등장하는 키워드에 대해 이해할 수 있다. ✅ 절대 경로와 상대 경로의 차이를 이해할 수 있다. -- 절대 경로의 시작이 루트 디렉토리(/)인 것을 이해할 수 있다. -- 상대 경로의 시작이 현재 디렉토리(.)인 것을 이해할 수 있다. ✅ 텍스트 에디터 nano를 이용해 파일을 수정하고, 저장할 수 있다. 📌 CLI 기본 중의 기본 ◾ Terminal 터미널 01. Ctrl + Alt + t 02. terminal 검색 .. 2021. 8. 1.