전체 글 54

(Python3) 프로그래머스 - Lv.1 신규 아이디 추천

https://programmers.co.kr/learn/courses/30/lessons/72410 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 문제 설명 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다...

(Python3) 프로그래머스 - Lv.1 로또의 최고 순위와 최저 순위

https://programmers.co.kr/learn/courses/30/lessons/77484 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호 programmers.co.kr 문제 설명 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호가 일치 3 4개 번호가 일치 4 3개 번호가 일치 5 2개 번호가 일치 6(낙첨) 그 외 로또를 구..

(Python3) 프로그래머스 - Lv.1 신고 결과 받기

https://programmers.co.kr/learn/courses/30/lessons/92334 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 programmers.co.kr 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다. 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다. 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신..

Flask Test - 테스트 코드를 사용한 기능 확인 테스트

1) Flask Test 테스트 코드는 내가 작성한 기능들이 의도대로 잘 수행하는지 기능 확인을 위한 테스트를 위해 작성한다. - 테스트의 장점 (1) 테스트 환경 세팅 자동화 특수한 상황에 맞는 파라미터도 사전에 정의할 수 있기 때문에, 매번 파라미터 값을 수동으로 바꿔가면서 테스트하지 않아도 된다. (2) 통합 테스트 시간을 줄임 통합 테스트에는 테스트코드로 검증하기 어려운 부분에만 집중할 수 있다. (클라이언트 인터페이스 등) (3) 외부와 의존성 있는 로직을 테스트하기 편리 외부와 통신하는 로직을 Mock으로 처리해두면, 외부에서 발생할 수 있는 여러 환경을 내가 가짜로 구성할 수 있다. (4) 전체 테스트 자동화 모든 세부 기능을 통합 테스트에서 다 확인하기는 어렵다. 전체 테스트가 자동화되면,..

Backend/Flask 2022.03.01

flask-restful - RESTful API서버를 만드는 라이브러리

- Flask는 return 값을 jsonify로 주어 RESTful API를 만들 수 있다. flask-restful 라이브러리를 활용하면 더 RESTful에 맞게 서버를 만들 수 있다. 코드비교 === flask === @app.route('/first', methods=['GET']) def route(): return jsonify('GET') @app.route('/first', methods=['POST']) def route(): return jsonify('POST') === restful === class First(Resource): def get(self): return 'GET', 200 def post(self): return 'POST', 200 위 flask 코드와 아래 res..

Backend/Flask 2022.03.01

Python - 플로이드 워셜 알고리즘 (Floyd-Warshall)

- 플로이드 워셜 알고리즘 1. 모든 노드에서 다른 모든 노드까지의 최단 경로를 모두 계산한다. 2. 플로이드 워셜 알고리즘은 단계별로 거쳐가는 노드를 기준으로 알고리즘을 수행한다. * 다만, 매 단계마다 방문하지 않은 노드 중에 최단 거리를 갖는 노드를 찾는 과정이 필요하지 않다. 3. 2차원 테이블에 최단 거리 정보를 저장한다. 4. 다이나믹 프로그래밍 유형이다. 각 단계마다 특정한 노드 k를 거쳐 가는 경우를 확인한다. 예를 들어, a에서 b로 가는 최단 거리보다 a에서 k를 거쳐 b로 가는 거리가 더 짧은지 검사한다. 점화식은 다음과 같다. a→b로 가는 거리 = (a→b로 가는 거리의 값)과, (a→k 값에 k→b를 더한 값) 중 작은 값이 된다. 만약 a→b로 가는 간선이 없다면, 그건 무한으..

Algorithm/Python 2022.02.26

Node.js - Async Request Handler (비동기 오류 처리)

1) request handler 흔히 promise()를 사용한 catch(next)와 async function의 try ~ catch, next를 사용하여 오류를 처리해왔다. 근데 이들 구문을 작성하는 것은 귀찮고 실수하기 쉽다. async request handler는 request handler를 async function으로 작성하면서 try~catch, next를 자동으로 할 수 있도록 구성한 아이디어다. 아래 코드에서 asyncHandler는 requestHandler를 매개변수로 갖는 함수형 미들웨어다. const asyncHandler = (requestHandler) => { return async (req, res, next) => { try { await requestHandler..

Backend/Node.js 2022.02.26

Node.js - Express.js와 MongoDB로 웹서비스 만들기

*참고하면 좋을 포스팅* Mongoose ODM 기초와 간단한 CRUD 구현 코드(Node.js) 1) Mongoose ODM이란? Object Data Modeling MongoDB의 Collection에 집중하여 관리하도록 도와주는 패키지다. Collection을 모델화하여, 관련 기능들을 쉽게 사용할 수 있게 도와준다. Mongoose ODM을 사용하는.. disdlzheld.tistory.com 1) Express.js + Mongoose로 CRUD 구현하기 (1) 모델 선언하기 MongoDB의 ObjectID는 URL에 사용하기 좋은 값이 아니기에 대체할 수 있는 shortId를 생성할 것이다. ---./models/schemas/post.js const mongoose, { Schema } =..

Backend/Node.js 2022.02.26

Mongoose ODM 기초와 간단한 CRUD 구현 코드(Node.js)

1) Mongoose ODM이란? Object Data Modeling MongoDB의 Collection에 집중하여 관리하도록 도와주는 패키지다. Collection을 모델화하여, 관련 기능들을 쉽게 사용할 수 있게 도와준다. Mongoose ODM을 사용하는 이유 - 연결 관리 Node.js 사용 시, 기본 드라이버는 연결 상태를 관리하기 어렵지만, Mongoose를 사용하면 간단하게 데이터베이스와의 연결상태를 관리해준다. - 스키마 관리 스키마를 정의하지 않고 사용할 수 있는 건 NoSQL의 장점이지만, 데이터 형식을 미리 정의해야 코드 작성과 프로젝트 관리에 유용하다. Mongoose는 Code-Level에서 스키마를 정의하고 관리할 수 있게 해준다. - Populate MongoDB는 기본적으로..

Backend/MongoDB 2022.02.26

Python - 분할 정복 (Divide and Conquer)

- 분할 정복 다중 분기 재귀를 기반으로 하는 알고리즘 디자인 패러다임을 말한다. 분할 정복은 직접 해결할 수 있을 정도로 간단한 문제가 될 때까지 문제를 재귀적으로 쪼개나간 다음, 그 하위 문제의 결과들을 조합하여 원래 문제의 결과로 만들어낸다. - 대표적인 분할 정복 알고리즘으로는 병합 정렬을 들 수 있다. 아래 그림은 병합 정렬을 이용한 분할 정복의 원리를 잘 보여준다. * 정리 1. 숫자가 담긴 배열이 있을 때 동일한 유형의 여러 하위 문제로 나눈다. 2. 가장 작은 단위가 될 때까지 하위 문제를 해결한다. 3. 그 하위 문제에 대한 결과로 원래 문제의 결과를 조합한다. - 분할 정복 의사코드 function F(x): if F(x)가 간단 then: return F(x)를 계산한 값 else: ..

Algorithm/Python 2022.02.25