[알고리즘][JS] 재귀 함수
·
알고리즘
재귀함수란? 자기자신을 호출하는 함수를 의미합니다. 일반적인 함수처럼 입력값을 받고, 그 입력값에 대한 연산을 하면서 결과값을 반환할 수 있습니다. 재귀함수는 함수내에서 자신을 호출하면서 작업을 반복적으로 수행하며, return keyword 즉,연산을 반복적으로 수행중 원하는 반환값이 나온다면 종료되도록 하는 함수입니다. 자바스크립트에서는 HTML의 DOM트리의 특성인 중첩된 div를 재귀함수를 통해 보다 쉽게 접근 할 수 있습니다. // 재귀함수를 사용하여 특정 클래스명을 가진 모든 DOM 요소를 찾는 함수 function findElementsByClassname(className, node) { node = node || document.body; // 시작 노드가 주어지지 않으면 body를 시작..
[알고리즘][JS] 분할과 정복 알고리즘
·
알고리즘
분할과 정복? 분할과 정복 알고리즘이란, 엄청나게 큰 문제를 나누어서 해결한 뒤, 합쳐서 문제를 해결한다는 뜻에서 분할과 정복 알고리즘이라고 불립니다. 대표적으로는 퀵정렬,병합정렬이 있습니다. 분할: 문제를 더이상 분할할 수 없을 때까지 동일한 유형의 여러 하위 문제로 나눕니다. 정복: 가장 작은 단위의 하위 문제를 해결하여 정복합니다. 조합: 하위 문제에 대한 결과를 원래 문제에 대한 결과로 조합합니다. 분할과 정복 알고리즘의 장점? 문제를 나누어 풀어가며 어려운 문제를 쉽게 해결 할 수 있다(효율적으로)는 장점이 있습니다. 그리고, 재귀적인 방법을 사용하기 때문에 알고리즘의 구현이 간결하고 이해하기 쉽습니다. '병렬적'으로 문제를 풀이하는 강력한 알고리즘중 하나입니다. 분할과 정복 알고리즘의 단점? ..
[알고리즘][JS] 다중 포인터 패턴
·
알고리즘
다중 포인터 패턴은 공식이름이 아닙니다. 다중 포인터 패턴 배열이나 리스트와 같은 데이터 구조에서 특정 조건을 만족하는 요소를 찾거나 조작하는데 사용되는 알고리즘 기법. 한쌍의 값이나 조건을 충족 시킨다는 개념만 알면 됨. 두가지의 참조값을 사용한다. [1,2,3,4,5,6,7] "asdfasdgaaxvasdFF" 두가지의 참조값을 설정하여 어느 한 곳으로 이동시키며 비교한다. 서로를 향하든 혹은 서로를 향하지 않고 한곳으로 이동하든. 예시 sumZero([-3,-2,-1,0,1,2,3]) // [-3,3] sumZero([-2,0,1,3]) // undefined sumZero([1,2,3]) // undefined sumZero라는 함수는 정렬된 배열을 가진 함수입니다. 1번째 배열에서 -3 3을 더..
[알고리즘] 빈도수 세기 패턴
·
알고리즘
빈도수 세기 패턴? 어떠한 문자열 및 배열을 빈도수체크 방식으로 풀이함 방식 원래는 중첩 for문을 이용하여 풀이하였지만 시간복잡도에서 O(n^2)의 시간 복잡도를 보였기 때문에, 효율적인 알고리즘이 아니라고 판단하였고 빈도수 세기 패턴을 이용하여 시간 복잡도를 줄였다. 문제 두 개의 문자열이 주어졌을 때, 두 번째 문자열이 첫 번째 문자열의 애너그램인지 확인하는 함수를 작성합니다. 애너그램은 다른 글자의 글자를 재배열하여 형성된 단어, 구 또는 이름입니다. 예시 validAnagram('', '') // true validAnagram('aaz', 'zza') // false validAnagram('anagram', 'na..
[JS] 백준 2884 - 알람 시계
·
알고리즘
문제 상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다. 이런 상근이를 불쌍하게 보던 창영이는 자신이 사용하는 방법을 추천해 주었다. 바로 "45분 일찍 알람 설정하기"이다. 이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다. 현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 ..
[JS] 백준 2525 - 오븐 시계
·
알고리즘
문제 KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 분 단위로 자동적으로 계산한다. 또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다. 훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오. 입력 첫째 줄에는 현재 시각이 나온다. 현재 시각은 시 A (0 ≤ A ≤ 23) 와 분 B (0 ≤ B ≤ 59)가 정수로 빈칸을 사이에 두고 순서대로 주어진..
Nodejs ORM Sequelize 알아보기
·
공부중/SQL
Sequelize? Sequelize는 Node.js에서 사용할 수 있는 ORM(Object-Relational Mapping) 라이브러리 중 하나입니다. ORM은 데이터베이스와 객체 지향 프로그래밍 언어 간의 불일치를 해결하는 방법으로, 데이터베이스의 데이터를 객체로 매핑하여 다룰 수 있도록 해줍니다. Express는 Node.js를 위한 웹 프레임워크로, Sequelize를 사용하여 데이터베이스와 상호 작용할 수 있습니다. Sequelize를 Express와 함께 사용하면 데이터베이스에서 데이터를 가져오거나 삽입, 업데이트, 삭제할 수 있는 API를 간단하게 작성할 수 있습니다. Sequelize는 다양한 데이터베이스 시스템과 호환됩니다. MySQL, PostgreSQL, SQLite 등의 데이터베이..
Python으로 백엔드 서버 아주쉽게 구축하기 (Flask 서버)
·
BackEnd
이전 포스팅에 react + flask 로 프로그램을 만들기로 했기 때문에 이번 포스팅에서는 flask 서버를 구축하는 방법에 대해서 설명 하도록 하겠습니다. flask? Flask는 웹 애플리케이션 개발을 위한 파이썬 프레임워크 입니다. 물론 파이썬으로 웹 개발을 할 때 많이 쓰이는 프레임워크로 가장 유명한 것은 Django(장고)인데, Django는 너무 무겁고 기능이 많아서 복잡합니다. 저 처럼 웹에 대한 이해가 풍부하지 않은 초보 입장에서 사용하기 어렵다는 뜻이기도 합니다. 그래서 저에게 필요한 기능만 최대한 라이트하게 개발을 하기 위해서는 Flask처럼 가벼운 프레임워크를 사용하기로 했습니다. flask로 hello world를 출력해보자 ! 플라스크 설치는 그냥 pip install Flask..