공부하고 기록하는, 경제학과 출신 개발자의 노트

Python 188

Python SQLAlchemy의 many to many relation에 soft delete 기능 적용하기

FastAPI + SQLAlchemy로 API 서비스 만들면서 해결한 사안 정리하기. soft delete가 필요한 이유? 삭제 요청이 들어올 때마다 물리적으로 DB에서 row 정리해 버리면, 삭제된 데이터를 복원한다던가 / 삭제된 데이터의 이력이나 히스토리 파악하려면 데이터베이스 엔진 레벨에서 작업해야 한다. 민감정보 다루는 게 아니고, 서버로그처럼 많이 쌓여서 주기적으로 삭제해야 하는 entity 같은 성격이 아니라면 간단한 비즈니스 로직이나 api에서는 soft delete이 주는 편익이 비용보다 훨씬 크다고 생각함. GORM은 soft delete 기능 도입이 엄청 쉽고, soft delete 적용한 object끼리 relation을 조합하면 ORM에서 자동으로 쿼리를 생성해준다. https://..

EuroPython 2022 - From Pip to Poetry: Python ways of packaging and publishing

https://youtu.be/KlvOIuifE5cFrom pip to poetry - Python ways of packaging and publishing발표자: Vinícius Gubiani FerreiraQA Senior Analyst at Azion (Security | Cells Squads)Python Backend Engineer로 오래 일했다고 함 Package ManagersPackage Manager: Configuration Management을 위한 tool.Configuration Management: System Engineering process for establishing consistence of our products attributes through its lifet..

[Python] 프로그래머스. 타겟 넘버 (Level 2)

https://programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr 만들 수 있는 모든 조건을 순회하면서 조건에 맞는 정답 개수를 찾도록 만들면 된다. dfs, bfs를 사용할 수도 있지만, 이 방식이 좀더 직관적이었다.

[Python] 프로그래머스. 2021 카카오 인턴 - 표 편집 (Level 3)

https://programmers.co.kr/learn/courses/30/lessons/81303 코딩테스트 연습 - 표 편집 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO" programmers.co.kr 백준의 '키로거' 문제에서 영감을 얻어 풀 수 있었던 문제. 선택 위치를 기준으로 왼쪽을 Left, 오른쪽을 right으로 두고 left의 최댓값 < right이 최솟값이 되도록 양쪽을 heap 자료구조로 저장하면 되는 문제. 순서를 기억하기 쉽도록 배열의 index를 사용한다. https://inspirit94..

[Python] 프로그래머스. 2021 카카오 인턴 - 거리두기 확인하기 (Level 2)

https://programmers.co.kr/learn/courses/30/lessons/81302 코딩테스트 연습 - 거리두기 확인하기 [["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1] programmers.co.kr 간단한 그래프 문제. 5 * 5 배열 조건이라서 연산량이 그렇게 많지는 않다. dfs / ..

[Python] 프로그래머스. 2021 카카오 인턴 - 숫자 문자열과 영단어 (Level 1)

https://programmers.co.kr/learn/courses/30/lessons/81301?language=python3 코딩테스트 연습 - 숫자 문자열과 영단어 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자 programmers.co.kr

[Python] 프로그래머스. 2021 카카오 recruit - 광고 삽입 (Level 3)

programmers.co.kr/learn/courses/30/lessons/72414#fn1 코딩테스트 연습 - 광고 삽입 시간을 나타내는 HH, H1, H2의 범위는 00~99, 분을 나타내는 MM, M1, M2의 범위는 00~59, 초를 나타내는 SS, S1, S2의 범위는 00~59까지 사용됩니다. 잘못된 시각은 입력으로 주어지지 않습니다. (예: 04:60:24, 11 programmers.co.kr 누적합 + 투 포인터를 활용해서 풀 수 있는 문제. 어떻게 적용해야 할지 감이 안 와서... 공식풀이와 풀이포스트를 참고했다.

[Python] 프로그래머스. 2021 카카오 recruit - 메뉴 리뉴얼 (Level 2)

programmers.co.kr/learn/courses/30/lessons/72411 코딩테스트 연습 - 메뉴 리뉴얼 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 programmers.co.kr 오랜만에 다시 풀어보는 코딩테스트 문제. 제한사항을 봤을 때, 주어지는 데이터 크기가 크지 않아서 브루트 포스를 적용할 수 있는 문제였다. combinations를 활용했고, 마지막에 sort하는 것보다 효율적인 방식 (heapq라던가..)이 있지 않을까? 생각했지만 일단 이렇게 풀어도 통과한다.