난이도: Lv.2 문제: https://school.programmers.co.kr/learn/courses/30/lessons/131701 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 1. len은 길이가 얼마인 연속 부분 수열인지를 나타낸다. len이 가질 수 있는 값의 범위는 1이상 elements 배열의 길이 이하이다. 2. 부분 수열 합을 위해 몇 번째 원소부터 더 할 것인지 정해야한다. 이 값을 i라 하자. 3. 2.의 i번째 원소부터 몇 개를 더할것인지 정해야한다. 1.에서 길이가 len이라고 정의했으므로 i번째 원소부터 i - l..
난이되: Lv.2 문제: https://school.programmers.co.kr/learn/courses/30/lessons/138476#qna 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 1. Map이나 Object로 무게별 귤 개수를 센다. 2. 개수를 기준으로 내림차순 정렬한다. 3. 한 상자에 담으려는 귤 개수인 k개가 될 때까지 2.의 맨 앞부터 더한다. 몇 번 더했는지가 귤 크기의 종류 수이므로 이 문제의 정답이 된다. 코드 Map으로 구현 function solution(k, tangerine) { var answer = 0; ..
passport 라이브러리 설치 passport는 node 앱에 인증을 추가해주는 유명한 도구이다. 구글이나 트위터, 페이스북 같은 계정으로도 로그인 할 수 있게 해준다. 이 프로젝트에서는 로컬 계정으로만 로그인 할 수 있게 구현한다. npm i passport passport-local passport-local-mongoose 사용자 계정 모델 User 스키마를 정의할 때 사용자 이름과 비밀번호는 지정하지 않는다. plugin이 스키마에 사용자 이름과 비밀번호를 추가해주기 때문이다. const mongoose = require('mongoose'); const passportLocalMongoose = require('passport-local-mongoose'); const Schema = mong..
DB 정의 아이디와 비밀번호를 저장하는 데이터베이스를 만들어보자. const userSchema = new mongoose.Schema({ username: { type: String, required: [true, 'Username cannot be blank'], unique: true }, password: { type: String, required: [true, 'Password cannot be blank'], unique: true } }) 비밀번호 암호화 비밀번호를 있는 그대로 저장하면 안 된다. 그런 일이 벌어져서는 안 되지만 누군가가 데이터베이스에 몰래 접근했다고 하자. 그럼 모든 사용자의 아이디와 비밀번호를 알 수 있을 것이다. 이런 상황을 막기 위해 비밀번호는 암호화해서 저장해야 한..
난이도: Lv.2 문제: https://school.programmers.co.kr/learn/courses/30/lessons/12953 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 바로 다음에 있는 수와 최소공배수를 구하는 과정을 배열의 끝에 도달할때까지 반복한다. 최소공배수는 소인수분해 하지않고 초등학생 시절 배웠던 것처럼 덧셈으로 구한다. 예시로 2와 3의 최소공배수를 구해보자. (2, 3) → (4, 3) → (4, 6) → (6, 6) 으로 최소공배수 6을 구한다. 두 수를 비교해서 더 작은 수만 더해준다. 코드 function so..
알고리즘 a의 번호가 b의 번호보다 클 수도 있다. 그래서 뭐가 더 작고 큰지 알아야 한다. (주저리에서 더 자세히 쓴다.) 1. 다음 라운드에 진출할 경우 배정받는 번호는 (n + 1) / 2이다. 2. A, B 중 더 작은 번호를 배정받은 사람의 번호가 홀수이고, 더 큰 번호를 배정받은 사람의 번호가 더 작은 번호를 배정받은 사람의 번호 + 1이면 그 라운드에서 만난다. 코드 function solution(n, a, b) { var answer = 0; let less = Math.min(a, b); let greater = Math.max(a, b); while (true) { if (less % 2 === 1 && less + 1 === greater) { return answer + 1; } ..
설치 npm i connect-flash 미들웨어 추가 flash는 session을 사용하므로 app.use(session ... ) 뒤에 넣어야 합니다. 캠핑장 생성하거나 수정 등등을 할 때 req.flash(키값, 메시지)를 하면 메시지가 res.locals의 속성으로 설정이 되어서 flash.ejs로 변수들을 보낼 수 있습니다. res.locals의 property들은 request의 라이프 타임 동안만 유효합니다. app.js const flash = require('connect-flash'); app.use(flash()); app.use((req, res, next) => { res.locals.success = req.flash('success'); res.locals.error = req..
난이도: Lv.2 문제: https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 최선의 상황은 2명씩 타는 보트가 최대한 많은 것이다. 한 보트에 두 명씩 태울 때 최선은 가장 가벼운 사람과 가장 무거운 사람을 같이 태우는 것이다. 먼저, 사람들의 몸무게를 담은 배열 people을 정렬한다. 다음으로, 가장 가벼운 사람과 가장 무거운 사람이 같이 탈 수 있는지 확인해야 한다. 둘 중 가벼운 사람의 인덱스는 i, 무거운 사람의 인덱스는 j라고 ..
난이도: Lv.2 문제: https://school.programmers.co.kr/learn/courses/30/lessons/12980 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 결론부터 말하면 입력으로 주어진 N을 2진수로 변환했을 때의 1의 개수가 건전지 사용량과 동일하다. 순간이동을 하는 위치가 현재까지 온 거리의 두 배이기 때문이다. 두 가지 경우를 생각해 보자. (n은 짝수로 가정, n이 홀수면 상황이 반대) 1. n까지 가야하는데, n/2까지 왔을 때 → 순간이동 2. n+1까지 가야하는데, n/2까지 왔을 때 → 순간이동 후 ..
세션 개요 쿠키는 많은 것을 저장할 수 없습니다. 브라우저의 쿠키 크기에는 제한이 있기 때문입니다. 또한, 쿠키는 서버 측에서 정보를 저장하는 것만큼 안전하지 않습니다. 그래서 세션이 필요합니다. 모든 데이터를 쿠키에 저장하지 않고 세션 id만 저장하였습니다. 하지만 서버에서는 그 쿠키만 있으면 해당하는 id의 모든 정보를 알 수 있습니다. 참고로, 이 데이터 저장소는 일반적인 데이터베이스와는 다릅니다. 세션 실습 세션 실습을 하기위해 먼저 cmd창에서 npm i express-session을 합니다. const colors = require('colors'); const express = require('express'); const app = express(); const session = requi..