분류 전체보기
[백준 14595] 동방 프로젝트(Large) (C++)
14595번: 동방 프로젝트 (Large) 첫 번째 행동으로 1번과 2번 방이 합쳐져 (1, 2), (3), (4), (5) 상태가 된다. 이후 두 번째 행동으로 2, 3, 4번 방이 합쳐져 (1, 2, 3, 4), (5)의 상태가 된다. 따라서 남아있는 동방의 수는 2가 된다. www.acmicpc.net x ~ y 사이의 모든 방은 통합해서 하나의 방으로 만든다. 통합하는 순서는 결과에 영향을 주지 않기 때문에 x가 작은 순으로 오름차순 정렬한다. 현재 통합한 y 좌표의 최댓값보다 새로 통합할 방의 x좌표가 더 크다면, ((새로운 x) - (이전 y)) 값 만큼 방의 개수가 늘어난다는 뜻이다. 만약 새로운 x의 좌표가 현재 y보다 작다면 새로운 방은 더 생기지 않는다. N에서 y의 최댓값을 뺀 값을 ..
[Djnago] Django 이메일 인증하기(Thread)
비밀번호를 찾기 위해서 가입 했던 이메일로 인증번호을 보내는 기능에 대한 설명 ## users/apis.py class SendPasswordEmailApi(PublicApiMixin, APIView): def post(self, request, *args, **kwargs): """ 비밀번호 변경 인증 코드 발송 """ target_username = request.data.get('username', '') target_email = request.data.get('email', '') target_user = User.objects.filter( username=target_username, email=target_email ) if target_user.exists(): auth_string = ..
[Django] Django Api 인증, 권한 설정
Django api를 하나로 묶어주는 라우팅 설정 방법과 api에 따른 권한 설정을 알아보자 api 폴더 urls.py mixins.py 위 두가지 파일로 구성했다. 이들은 앞으로 만들 모든 api들의 구심점 역할을 하는 파일이다. urls.py를 통해서 위 그림에서 보이듯이 엔드포인트를 다양하게 구성해준다. api/ 로 시작하는 url을 다양하게 뻗어나가게 해주는 역할을 한다. urls.py ## api/urls.py from django.urls import path, include v1_patterns = [ path('auth/', include('auth.urls')), path('users/', include('users.urls')), path('board/', include('boards...
[백준 1941] 소문난 칠공주 (C++)
1941번: 소문난 칠공주 총 25명의 여학생들로 이루어진 여학생반은 5*5의 정사각형 격자 형태로 자리가 배치되었고, 얼마 지나지 않아 이다솜과 임도연이라는 두 학생이 두각을 나타내며 다른 학생들을 휘어잡기 시작 www.acmicpc.net 처음에 단순 dfs로 갔다가 ㅓㅏㅗㅜ 모양으로 탐색이 불가능해서 바로 접었다. bfs로 다시 도전하는데 정점간의 상태정보를 공유할 수가 없어서 방법을 생각하다가 모든 경우의 수가 최대 25C7 = 48만으로 충분히 탐색 가능함을 깨닫고 dfs를 사용해서 상태 정보를 기록하고 구한 상태들이 서로 이어져 있는 경우를 찾는 방식으로 시도를 했다. 2차원 배열을 1차원 배열로 바꿔서 편하게 백트래킹을 할 수도 있었지만 굳이 내가 2차원 배열을 유지하면서 백트래킹을 해보려는..
[백준 1043] 거짓말 (C++)
1043번: 거짓말 지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게 www.acmicpc.net 재미있는 문제였다. 나는 사람과 파티를 똑같이 하나의 정점으로 보았다. 둘다 최대 50이므로 사람은 51부터, 방은 1부터 번호를 가지도록 설정했다. 진실 감별사부터 시작하는 dfs를 수행한다. 이때 연결되는 모든 정점은 진실 감별사로 바뀌게 된다. 처음 주어진 진실 감별사와 연결된 모든 정점을 진실 감별사로 바꾸고, 아직까지 진실 감별사가 되지 않은 사람의 수를 출력하면 답을 구할 수 있다. 처음에 Union find로 풀려고 했다가 너무 어려워졌다. 그래프를 계속 그려..
[백준 2616] 소형기관차 (C++)
2616번: 소형기관차 첫째 줄에 기관차가 끌고 가던 객차의 수가 입력된다. 그 수는 50,000 이하이다. 둘째 줄에는 기관차가 끌고 가던 객차에 타고 있는 손님의 수가 1번 객차부터 차례로 입력된다. 한 객차에 타고 있 www.acmicpc.net 현재 칸을 선택할 때, 선택하지 않을 때를 정해서 재귀를 수행하면 되는 문제이다. 현재 칸을 선택하지 않는다면 현재 칸의 번호를 +1 한 채로 다음 칸으로 넘어간다. 현재 칸을 선택한다면? 현재 칸부터 소형 기관차의 크기만큼 연속된 칸에 타있는 손님의 수를 누적합 배열 parr을 통해서 구해준다. 그리고 현재 칸의 번호를 +소형기관차의크기 한 채로 다음 칸으로 넘어간다. 기저 조건은 소형 기관차를 선택한 횟수가 4가 되거나 현재 칸을 선택해도 소형 기관차의..
[백준 2696] 중앙값 구하기 (C++)
2696번: 중앙값 구하기 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스의 첫째 줄에는 수열의 크기 M(1 ≤ M ≤ 9999, M은 홀수)이 주어지고, 그 다음 줄부터 이 수열의 원소가 차례대로 주 www.acmicpc.net 일단 처음에 들어오는 값은 반드시 최초의 중앙값이고 최초의 기준값이 된다. 그리고 앞으로 들어오는 값을 현재 기준과 비교해서 기준보다 크다면 최소 힙에, 기준보다 작다면 최대 힙에 넣어준다. 만약 지금까지 입력받은 수가 짝수라면 넘어간다. 하지만 홀수라면 현재 기준값이 중앙값이 되기 위해서는 최소 힙과 최대 힙에 들어있는 원소의 수가 서로 같아야 한다. 코드 : 만약 최소 힙의 수가 더 많다면 최소 힙에서 최상단 원소를 중앙값으로 둘..
[Nginx] 웹 서버 Nginx 에 대해서...
최근 수정일: 2022/05/24 Django로 구축한 API 서버와 React를 연결하고 배포하기 위해서 Nginx를 사용해보았다. Django와 React를 연결하기 위해서 웹 서버와 Nginx에 대한 이해가 반드시 필요했고, 앞으로 Nginx를 공부하며 알게 되는 지식들을 최대한 자세히 이 포스팅에 담을 예정이다. 그리고 Nginx만 다루는 게 아니라 웹 서버의 전반적인 이해를 위해서 조금이라도 궁금한 점이 생기면 옆길로 계속 새어나갈 예정이다. Nginx란? #1 간단히 말해서 경량화된 소프트웨어 웹 서버이다. Nginx는 Single-thread로 동작하며 비동기 non-blocking I/O 이벤트 기반으로 요청을 처리한다. 따라서 적은 자원으로 효율적인 트래픽 처리가 가능하다. (멀티 스레드..
[Django] PROJECT 홈페이지 (유저 모델, 쿼리 최적화)
지난 9월 중순부터 부산 연합 동아리 PROJECT 웹사이트 백엔드를 맡아서 홈페이지를 개설하게 되었다. 아직 미완성이고 프론트와 협의를 거칠 부분이 많이 존재해서 수정작업이 더 필요하지만, 수정될 때마다 이 글도 수정하기로 하고 일단 지금까지 어떤식으로 작업했는지 기록을 해두려고 한다. 우선 반드시 필요한 기능으로는 회원가입/로그인 공지사항 활동기록 이 정도를 꼽을 수 있었다. django 파일의 현재 파일 tree 구조이다. 더보기 . ├── FAQs │ ├── __init__.py │ ├── __pycache__ │ ├── admin.py │ ├── apis.py │ ├── apps.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── __init__.py │..
[백준 1199] 오일러 회로(인접 리스트) (C++)
[백준 1199] 오일러 회로 C++ 1199번: 오일러 회로 첫 줄에는 정점의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 그리고 다음 N개의 줄에 대해 인접행렬의 정보가 주어진다. i+1번째 줄에는 i번 정점에 대한 인접행렬이 주어진다. 두 정점 hyeo-noo.tistory.com 예전에 풀었던 오일러 회로 문제가 인접행렬로 풀 수 없게 데이터가 추가되면서 많은 사람들이 시간초과의 늪에 빠졌었다. 나도 마찬가지로 시간초과로 틀리게 되었고 4달이 지나서야 인접 리스트 방식의 오일러 회로를 공부하고 다시 풀게 되었다. INPUT 우선 input 부분에 많은 변화가 있었다. i에서 j로 가는 간선을 인접 행렬로 저장하지 않고 간선 그 자체로 저장했다. 대신에 j에서 i로 가는 간선은, 입력에서 i에서 ..