일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- game
- GIT
- 게임
- Bull
- nestjs
- dfs
- react
- flask
- mongoose
- 공룡게임
- OCR
- Nest.js
- TypeScript
- AWS
- nodejs
- MySQL
- cookie
- jest
- Sequelize
- Python
- Dinosaur
- MongoDB
- JavaScript
- 정렬
- 자료구조
- Express
- Queue
- typeORM
- class
- Today
- Total
포시코딩
1월 1주차 - 스파르타 내일배움캠프 8주차 본문
이번 주 알게 된 점
Python 다루기
in, not in
print('c' in 'abc') # True
print('e' not in 'abc') # True
sort(), sorted()
a = ['b', 'c', 'a', 'd']
a.sort()
print(a) # ['a', 'b', 'c', 'd']
b = ['b', 'c', 'a', 'd']
b = sorted(b)
print(b) # ['a', 'b', 'c', 'd']
sort(), sorted()의 매개변수
reverse=True(내림차순)
l = [15, 22, 8, 79, 10]
l.sort(reverse=True)
print(l) # [79, 22, 15, 10, 8]
key
l = ['banana', 'code', 'dog', 'apple']
print(sorted(l, key=len)) # ['dog', 'code', 'apple', 'banana']
print(sorted(l, key=lambda x: x[2])) # ['code', 'dog', 'banana', 'apple']
tuple_l = [ ('banana', 0), ('code', 1), ('dog', 5), ('apple', 3) ]
tuple_l.sort(key=lambda x: (x[0], x[1]))
print(tuple_l) # [('apple', 3), ('banana', 0), ('code', 1), ('dog', 5)]
tuple에 대한 정렬에 대해 lambda 두 번째 매개변수는
첫 번째에 대한 정렬 후 같은 값에 대해 두 번째 매개변수로 정렬한다는 뜻이다.
dict - keys(), values
dict = {'a': 1, 'b': 2, 'c': 3}
print(list(dict.keys())) # ['a', 'b', 'c']
print(list(dict.values())) # [1, 2, 3]
dict - fromkeys()
seq = ('a', 'b', 'c', 'd')
dict_1 = dict.fromkeys(seq)
print(dict_1) # {'a': None, 'b': None, 'c': None, 'd': None}
dict_2 = dict.fromkeys(seq, 10)
print(dict_2) # {'a': 10, 'b': 10, 'c': 10, 'd': 10}
dict - join()
dict = {'a': 1, 'b': 2, 'c': 3}
print(''.join(dict)) # abc
list.remove() - 특정 값 제거
a = [4, 2, 5, 1, 3]
a.remove(2)
print(a) # [4, 5, 1, 3]
list.pop() - 특정 인덱스의 값 제거
a = [4, 2, 5, 1, 3]
a.pop(2)
print(a) # [4, 2, 1, 3]
str.count(x), list.count(x) - str, list에 대해 x가 몇개 존재하는지 확인
result = 'abababaa'.count('a')
print(result) # 5
result = ['a', 'b', 'a', 'd', 'aa', 'a'].count('a')
print(result) # 3
모듈화 Class
팀프로젝트를 하면서 다음 프로젝트 때도 쓸 수 있게끔 특수한 기능들을 사용하기 위한
클래스를 모듈화하게 되어 정리해봤다.
multer를 이용한 이미지(및 파일) 업로드Class
uploadManager.js
'use strict';
const multer = require('multer');
const moment = require('moment');
const fs = require('fs');
class UploadManager {
constructor(path) {
this.path = path;
this.multer = multer;
}
storage = multer.diskStorage({
destination: (req, file, cb) => {
const upload_path = this.path;
fs.mkdirSync(upload_path, { recursive: true });
cb(null, upload_path);
},
filename: (req, file, cb) => {
file.originalname = Buffer.from(file.originalname, 'latin1').toString('utf8');
cb(null, moment().format('YYYYMMDDHHmmss') + '_' + file.originalname);
},
});
}
module.exports = UploadManager;
사용예시
const UploadManager = require('../config/UploadManager');
const uploadManager = new UploadManager(process.env.MULTER_PATH_UPLOADS_ORDERS);
router.post(
'/',
authMiddleware,
uploadManager.multer({ storage: uploadManager.storage }).array('files'),
ordersController.createOrder
);
pagination Class
paginationManager.js
'use strict';
require('dotenv').config();
class PaginationManager {
constructor(page, count_all) {
const PAGE_LIMIT = parseInt(process.env.PAGE_LIMIT);
const SECTION_LIMIT = parseInt(process.env.SECTION_LIMIT);
this.page = page;
this.total_page = parseInt(count_all / PAGE_LIMIT) + (count_all % PAGE_LIMIT != 0 ? 1 : 0);
this.start_page = parseInt((this.page - 1) / SECTION_LIMIT) * SECTION_LIMIT;
if (this.start_page % SECTION_LIMIT === 0) {
this.start_page += 1;
}
this.end_page = this.start_page + SECTION_LIMIT - 1;
if (this.end_page > this.total_page) {
this.end_page = this.total_page;
}
}
render() {
return { page: this.page, total_page: this.total_page, start_page: this.start_page, end_page: this.end_page };
}
}
module.exports = PaginationManager;
사용예시
const PaginationManager = require('../config/PaginationManager');
// ...생략
const paginationManager = new PaginationManager(page, count_all);
return { code: 200, data, pagination: paginationManager.render() };
이번 주 목표 달성
코딩테스트 연습문제 Lv.0 다 풀기
팀프로젝트 하느라 이번주도 다 풀지 못했다.
난이도 낮은거부터 풀었더니 이제 점점 한 문제 당 푸는 시간이 늘어나
푸는 속도도 많이 느려지고 어려워졌다.
현재 유독 경우의 수 관련 문제들에 대해 어려움을 느끼고 있는데
수학쪽으로 따로 확인해보니 이런걸 '순열(permutation)'이라고 한다.
정확한 뜻은
서로 다른 n개의 원소에서 r개를 중복 없이 순서에 상관 있게 선택하는 혹은 나열하는 것을 말한다.
나타내는 방법으로는 반복문과 재귀 함수가 있는데 자세한건 아래 링크를 통해 확인 가능하다.
https://velog.io/@purin_no_corin/알고리즘-자료구조-경우의-수-순열
그 밖에도 차츰 자료구조를 활용해야 풀리는 문제들이 늘어나고 있는데
다 푸는거에 조급해하지 말고 하나하나 내껄로 만들며 다음 단계로 넘어가도록 하자
팀프로젝트 종료
체감상 매우 길었던 주말 포함 7일에 걸친 팀프로젝트가 끝났다.
이번 프로젝트의 주제는
- 계층형 아키텍처 패턴으로 프로젝트 구성
- 서비스 구조를 통한 합리적 설계
- 테스트 코드
- socket 통신을 활용한 기능 만들기 (socket.io)
4가지 였는데, 첫 번째, 두 번째는 그동안 많이 해와서 익숙하다 쳐도
테스트 코드는 아예 처음에
나머지 기능 구현이 안되어 소켓 통신은 손도 못댔다.
때문에 처음으로 팀프로젝트가 끝났음에도 한동안 프로젝트를 손봐야 할 것 같다.
프로젝트 마무리 후 못다한 기능을 만들기 위해 정리하던중
남의 코드로 어지럽고 깨끗하지 못한 걸 보면서 그냥 엎고 처음부터 혼자 다시 만들까 생각도 했지만
새로운 회사에 입사서 진행중이던 프로젝트에 내가 들어가
손본다는 마인드로 임해야 겠다는 생각으로 고쳐먹었다.
다행히 오래 걸릴 것 같진 않지만 한동안은 캠프 진도도 나갈 것이고 코딩테스트 연습문제도 난이도가 높아져서
그 사이에 이 프로젝트를 마무리하느라 고생을 좀 할 것 같다.
다음 주 목표
미완성인 팀프로젝트 완성하기
Lv.1 문제 하루 1문제 이상 풀기
'WIL' 카테고리의 다른 글
1월 3주차 - 스파르타 내일배움캠프 10주차 (0) | 2023.01.26 |
---|---|
1월 2주차 - 스파르타 내일배움캠프 9주차 (0) | 2023.01.15 |
12월 5주차 - 스파르타 내일배움캠프 7주차 (0) | 2023.01.02 |
12월 4주차 - 스파르타 내일배움캠프 6주차 (0) | 2022.12.26 |
12월 3주차 - 스파르타 내일배움캠프 5주차 (0) | 2022.12.19 |