목록분류 전체보기 (89)
설모의 기록
자바스크립트의 함수는 객체이기 때문에 프로퍼티를 가질 수 있습니다. 이 점을 이용해 함수에 프로퍼티를 추가해 결과 값을 캐시하고, 다음 호출 지점에 그 연산을 반복하지 않고 캐시된 프로퍼티의 값을 반환해주는 패턴을 메모이제이션 패턴이라고 합니다.예를 들어, 파라미터로 양의 정수값을 넣으면 1부터 파라미터 값까지의 합을 구하는 함수를 구현하려고 합니다. 위의 예제처럼 함수를 구현해도 되지만, 만약 addFunc (1) ~ addFunc(10000) 을 모두 구하고 싶다면 굉장히 많은 반복문을 돌아야 합니다. 이럴 떄 메모이제이션 패턴을 이용해 구현을 하면 반복문을 최소화할 수 있습니다. 위의 예제처럼 구현한다면, cache[number - 1] 에 값이 있을 때 그 값을 가져와 number 와 더해준 후 ..
스크립트 언어인 자바스크립트는 클래스 개념이 없습니다. 그러나 함수를 이용해 클래스처럼 구현할 수 있고, 객체를 생성할 수 있습니다. 자바스크립트에서의 함수의 특징은 일급객체라는 것과 유효범위를 생성한다는 것입니다. 우선 자바스크립트에서 함수는 일급객체입니다. 일급 객체란 다음의 목록이 모두 가능한 객체를 말합니다.변수나 데이터 구조 안에 담을 수 있다.인자로 전달할 수 있다.반환 값으로 사용할 수 있다.런타임에 생성할 수 있다.할당에 사용된 이름과 관계 없이 고유하게 식별할 수 있다. 자바스크립트에서는 자바와는 달리 for 문같은 반복문을 구현해도 그 안에서의 유효범위, 즉 스코프가 생성되지 않습니다. 이 말은 반복문 안에서 생성한 변수는 반복문 밖에서도 사용할 수 있다는 말입니다. 그러나 함수를 이용..
이 문제는 다익스트라 알고리즘의 대표 문제입니다. 다익스트라 알고리즘 개념에 대해서 잊어버려서 개념부터 다시 보고 온,,다익스트라 알고리즘은 가중치가 존재하는 그래프에서 정점과 정점사이의 최단거리를 구할 때 사용 되는 알고리즘 입니다. 처음엔 다익스트라 알고리즘 개념만 보고 온 상태로 문제를 풀었습니다. weight 를 int[nV + 1][nV + 1] 배열로 만들어 사용했더니 런타임 에러가 났습니다.왜그러나 했는데 이차원 배열일 경우에는 사용하지 않는 인덱스도 너무 많았습니다. 게다가 정점의 개수 nV 가 20,000 개라면, weight 배열에만 20,000 * 20,000 * 4 byte 가 필요하기 때문에 메모리 낭비입니다.알고리즘 문제를 풀 때 다익스트라 알고리즘은 우선순위 큐와 함께 사용하는..
저는 dfs 를 이용해 풀었습니다. 테스트 케이스를 포함해 모든 케이스가 맞는데도 불구하고 계속 틀려서 왜 그러나 했는데, 한 반복문 안에서 뿌요뿌요가 두번 터지면 count 변수는 한번만 증가시켜야 제대로 된 정답이 나옵니다. (예) 아래의 케이스의 경우, count 변수는 1 이 나와야 합니다.............................................................RRRYYYRRRYYY 푸는 방식- 뿌요뿌요 배열에서 내가 검사해야 할 가장 위쪽 X 인덱스가 몇인지 구한다. (minX)- while 문을 돌면서 '.' 이 아닌 char 를 찾는다.- 그 char 를 포함해 주변에 같은 문자들의 개수가 4를 넘으면 뿌요뿌요를 터뜨리고 flag 변수를 바꿔준다.- fla..
저는 dfs, bfs 를 이용하여 문제를 풀었습니다. 푸는 방식- dfs 를 이용해 이중루프를 돌려 섬마다 번호를 체크해줍니다.- bfs 를 이용해 큐에 들어있는 인덱스 주변으로 섬을 확장 시킵니다.- 가장 짧은 길이를 출력합니다. import java.io.*; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; class Point { int x, y; Point (int x, int y) { this.x = x; this.y = y; } } public class Main { static int N, COUNT = 0, NUMBER = 0; static int[][] a, visit, bridge..
이전 포스트에서 몽고디비 설치에 대해 포스팅 했습니다.이번에는 몽고디비 명령어에 대해 정리해보겠습니다.몽고디비의 기본 포트번호는 27017 입니다. # mongo 명령어 use local // use 데이터베이스_이름 으로 데이터베이스 지정db.users.insert(JSON객체) // users 라는 컬렉션에 객체 추가db.users.find( ) // users 라는 컬렉션에 들어있는 문서를 모두 보여줌db.users.find( ).pretty() // users 라는 컬렉션에 들어있는 문서를 JSON 형태로 줄바꿈되어 보여줌db.users.remove(JSON객체) // 예) db.users.remove({name: /hyeona/}) 와 같이 regexp 표현식 이용가능 # 로그인 기능 예제 1...
몽고디비는 NoSQL의 대표적인 데이터베이스로서, 성능이 빠른 강력한 데이터베이스입니다.설치 및 환경변수 설정에 대한 것은 맥을 기준으로 적습니다. 우선 설치는 http://www.mongodb.com 들어가 운영체제에 맞게 다운로드를 합니다.그리고 터미널에 접속해 sudo mv mongodb-osx-x86_64-3.4.9 /usr/local/mongodb 위의 명령어를 입력해 다운로드한 파일을 /usr/local/mongodb 폴더로 이동시켜줍니다.그 이후 데이터베이스를 읽고 쓸 폴더를 생성한 후 권한을 부여합니다. (아래의 명령어 차례로 실행) 1. sudo mkdir -p /data/db2. sudo chown username /data/db 다음의 명령어는 환경변수를 추가하기 위해 실행합니다. 1..
chipmunk.js 는 cocos-2d js 에서 물리를 사용해 구현하려할 때 사용하는 라이브러리이다. chipmunk 에 존재하는 중력과 충돌을 이용해 게임을 구현할 수 있다. chipmunk를 사용하기 위해서는 우선 project.json에 라이브러리를 추가해준다. 중력공간을 구현하려는 Scene 또는 Layer 에 cp.Space 를 구현한다.- gravity: 중력을 어느방향으로 줄 것인지에 대한 벡터값- iterations: 이 값이 높아질수록 정확해지지만 cpu사용이 많아지고, 낮을수록 충돌할 때 출렁이는 물결이 커보임. 기본값은 10이다.- damping: 제동력. 기본값은 1이다.- idleSpeedThreshold: body가 idle 상태가 되는 가속도 값. 기본값은 0이다.- sle..
일정 기간마다 데이터의 개수를 뽑아오고 싶을 때 (예를 들어 1주일마다 회원가입 수) 쓰는 쿼리이다. 처음에 생각한 방법은 count(case when convert(varchar(10), regDate, 120) between convert(varchar(10),DATEADD(d, -7, getDate()), 120) and convert(varchar(10), getDate(), 120) then 1 end) 를 사용했다. 그런데 일주일 씩 count(*) 를 여러개 select 했더니 속도가 느려지는 것을 느꼈다. 그래서 검색하던 도중 새로운 쿼리를 알게 되었다.SELECT DATEADD(week, DATEDIFF(week, 0, date컬럼명), 0) AS weekStart , count(*) a..