자바스크립트에서는 값이 항상 특정 자료형, 예를 들어 문자열이나 숫자와 같은 형태로 존재한다.그리고 자바스크립트 언어 레벨에서 값으로 취급하는 것은 무엇이든 변수에 넣을 수 있다는 원칙이 있다. 자바스크립트에서는 값으로 취급하는 범위가 매우 넓은데 숫자나 문자열뿐만 아니라 함수, 배열 등도 모두 값으로 취급한다.또한, 자바스크립트의 변수는 어떤 특정 타입과 연결되지 않으며 모든 타입의 값으로 할당 및 재할당이 가능하다.let foo = 42; // foo는 Number 타입이었다가foo = "bar"; // 이제 foo는 String 타입이 되었고foo = true; // 지금은 Boolean 타입이 되었다. 이처럼 자료의 타입은 있지만 변수에 저장되는 값의 타입은 변할 수 있는 언어를 "동적 타입 언..

📖 목차 - 오류 - 개선사항 로컬 개발환경 및 배포환경에서 서비스를 사용할 때 발생하는 오류나 개선사항을 찾아보자. 찾는대로 계속 추가할 예정이다. 😮 오류 □ Flask 서버 연결 문제 - 로컬에서 도커로 flask 서버 돌릴 때는 정상 작동하는 걸로 보아 flask 배포에서 문제가 발생한 듯함. - 배포한 사이트에서 기록하기는 전혀 안되고, 키워드 추출은 될 때 있고 안될 때 있음. - 이거 해결 안되면 배포한 서비스에서 기록하기, 키워드 추출, 진료과목 추천 기능 안됨. □ DB 변경 및 세팅 - 현재 DB연결이 백엔드 담당했던 팀원의 계정으로 되어있는데 앞으로 계속 리팩토링하며 사용할 거니까 내 계정으로 변경하고 병원, 진료과목 데이터 등 초기 데이터들 세팅하기 □ 카카오톡 회원가입 / 네이버 ..

📖 목차 - Next.js 프로젝트 Vercel로 배포하기 - Flask 서버는 pythonanywhere로 배포하기 - 아직 완벽하지 않은 배포 상태 본격적인 리팩토링을 시작하기 전에, 지금까지 완성된 서비스를 배포시켜보기로 결정했다. 엘리스 AI트랙에서는 프로젝트 기간 동안 각 팀마다 VM을 하나씩 제공해주기 때문에 개발 완료 후 VM 환경에서 배포하여 서비스를 테스트해보긴 했지만 그 후로 VM은 종료되었다. 그래서 지금은 로컬 환경에서만 테스트가 가능한데 포트폴리오로 첨부하려면 아무래도 배포한 서비스가 있는게 좋을 것 같고, 로컬 개발환경과 배포 환경에서 나는 오류는 또 다르다는걸 프로젝트를 하면서 느꼈었기 때문에 본격적인 리팩토링에 앞서 먼저 배포에 도전해보았다. 그래도 아직 취업 전인데 유료로 ..

📖 목차 - 프로젝트 소개 - 꽤나 늦은 프로젝트 후기 & 리팩토링 결심 - 리팩토링해야 할 사항들 정리 💜 프로젝트 소개 바디토리는 음성인식을 통해 매일 나의 몸 상태를 간편하게 기록하고, 기록된 증상을 기반으로 병원을 추천해주는 건강관리 웹 서비스이다. 또한, (전국 병원들과 제휴했다는 가정 하에) 병원과의 연계를 통해 손쉬운 기록 공유 및 진료내역 관리도 가능한 서비스이다. 👇 서비스 기획 의도나 자세한 기능 소개, 작업 내역 등은 아래 노션에서 확인할 수 있다. 바디토리: 건강기록 및 병원추천 웹 서비스 A new tool for teams & individuals that blends everyday work apps into one. hihisohi.notion.site 🤔 꽤나 늦은 프로젝트..

1️⃣ 버블 정렬 (Bubble) loop를 돌면서 인접한 데이터 간의 swap 연산을 통해 정렬하는 방식 - 시간 복잡도 : O(n^2) - 다른 정렬 알고리즘보다 속도가 느린 편 N개의 데이터를 정렬한다고 가정하면, 루프를 한번 돌때마다 맨 뒤에 데이터부터 하나씩 픽스해 나간다. → 루프를 한번 도는데 N번의 비교를 하니 N의 시간복잡도를 가진다. → 그 루프를 N번 돌아야 모든 데이터가 정렬된다. 한 번 도는데 N의 시간복잡도를 가지는 루프를 N번 도니까 버블정렬의 시간복잡도가 n^2이다. 버블 정렬 구현 과정 말로 풀어 써보기 1) 비교 연산이 필요한 루프 범위를 설정한다. 2) 인접한 데이터 값을 비교한다. 3) swap 조건에 부합하면 swap 연상을 수행한다. 4) 루프 범위가 끝날 때까지 ..

1️⃣ 구간 합 합 배열을 이용하여 시간 복잡도를 줄이기 위한 알고리즘 합 배열 S S[i] = A[0] + A[1] + ... + A[i-1] + A[i] 기존 배열의 일정 범위의 합을 구하는 시간 복잡도가 O(N)에서 O(1)로 감소 합 배열을 구하는 방법은 S[0] = A[0] S[i] = S[i-1] + A[i] 예를 들어, 배열 A와 배열 A의 합 배열 S는 다음과 같다. A = [1, 2, 3, 4, 5] S = [1, 3, 6, 10, 15] 구간 합을 구하는 방법 배열 A의 인덱스 i부터 j까지의 구간 합을 구하고 싶다면 S[j] - S[i-1] 예를 들어, A = [15, 13, 10, 7, 3, 12] 라는 배열에서 A[2]부터 A[5]까지의 구간 합을 구하면 S[5] = A[0] + ..

✅ 자바스크립트에서 식별자(Identifier)란? 코드 내의 변수, 함수, 혹은 속성을 식별하는 문자열이다. 즉 변수, 함수, 속성 명을 지을 때 사용하는 이름이다.let age = 31function setAge() {}const o = { day: 6,}// age, setAge, o, day가 식별자 - 대소문자를 구별하며 유니코드 글자, $, _, 숫자(0-9)로 구성할 수 있지만, 숫자로 시작할 수는 없다.- 공백문자는 사용할 수 없다.- 자바스크립트 예약어(if, else, for 등..)는 사용할 수 없다.- 길이 제한은 없으나 통상적으로 길게 쓰지는 않는 편이다.- 식별자는 코드의 일부이지만 문자열은 데이터이기 때문에 식별자와 문자열은 다르다.- 식별자를 문자열로 변환하는 방법은 ..

🌅 기획 배경저는 몸에 이상이 생겼을 때 “이거 전에도 이랬던거 같은데 언제였더라?”, “이거 처음이 아니면 문제있는건가? 병원에 가야하나?” 라는 고민을 자주하는 편입니다. 이런 고민을 자주 하다보니 몸에 이상이 생겼을 때마다 핸드폰 기본 다이어리에 기록하고 있는데 이걸 편하게 관리할 수 있는 앱이 있다면 좋겠다고 생각했습니다. 연령대에 관계없이 건강에 대한 관심이 증대되고 있는 요즘, 개인차원에서 건강관리를 목적으로몸상태를 다이어리처럼 매일 기록하고 관리할 수 있는 서비스가 있었으면 좋겠다고 생각했습니다. 또한, 몸이 아파 병원에 방문했을 때 단편적인 현재 증상의 서술만으로 진료를 받아진료결과가 정확하지 않거나 처방에 대해 만족하지 못한 경우가 종종 있지 않았나요? 매일 몸 상태를 기록하고, ..

1️⃣ DFS (깊이 우선 탐색) 그래프 완전 탐색 기법 중 하나로, 그래프의 시작 노트에서 출발하여 탐색할 한 쪽 분기를 정하여 최대 깊이까지 탐새을 마친 후 다른 쪽 분기로 이동하여 다시 탐색을 수행하는 알고리즘 (완전 탐색이란 그래프에 있는 모든 노드를 탐색하는 것) 특징 - 재귀 함수로 구현 - 스택(Stack) 자료구조 이용 - 시간 복잡도는 O(V+E) V : 노드 수, E : 예지 수 깊이 우선 탐색을 응용하여 풀 수 있는 문제 단절점 찾기, 단절선 찾기, 사이클 찾기, 위상 정렬, ... DFS 핵심 이론 DFS는 한 번 방문한 노드를 다시 방문하면 안 되므로 노드 방문 여부를 체크할 배열이 필요하다. 그래프는 인접리스트로 표현하고, 스택을 사용하여 DFS를 구현해보자. 1) 시작 노드를 ..

알고리즘에서 시간 복잡도는 주어진 문제를 해결하기 위한 연산 횟수를 의미한다. 그래서 시간 복잡도는 코딩테스트를 풀 때 어떤 알고리즘을 사용할지에 대한 선택의 기준이 된다. 예를 들어, 파이썬 프로그램에서는 2,000만번~1억 번의 연산을 1초의 수행 시간으로 예측할 수 있으므로 연산 횟수와 수행 시간을 고려하여 어떤 알고리즘을 써야할지 생각해 볼 수 있다. 물론, 시간 복잡도만으로 어떻게 문제를 풀지 선택하는 것은 아니지만 데이터의 갯수에 따라 시간 복잡도를 계산할 줄 알면 써야하는 알고리즘의 범위를 좁힐 수 있게 된다. 시간 복잡도 표기법 시간 복잡도를 정의하는 3가지 유형이 있다. 빅-오메가 Ω(n)최선일 때(best case)의 연산 횟수를 나타낸 표기법빅-세타 θ(n)보통일 때(ave..
