전체 글
-
백준 2573 nodejs백준/너비 우선 탐색 2023. 3. 1. 14:19
문제 https://www.acmicpc.net/problem/2573 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net 풀이 1년 단위로 BFS를 실행해 빙산을 녹인다. 1년이 새로 시작될 때마다 DFS를 실행해 빙산이 전부 연결돼 있는지 확인한다. let [[N, M], ...I] = `${require('fs').readFileSync(0)}`.trim().split`\n`.map(e => e.split` `.map(Number)) class Node { constructor(e) { this.val..
-
외래 키(FK) 사용에 대한 정리Project/MySQL 2023. 2. 25. 13:43
사용 찬성 관계형 DB에서 관계를 사용하지 않을 거라면 NoSQL DB를 사용하는 게 나음 서버 단에서 무결성 검사를 해주더라도 실수가 발생할 가능성을 배제할 수 없음 사용 반대 무결성 검사로 인해 성능이 떨어짐 개발 시 데이터 수정이 불편 참조 https://softwareengineering.stackexchange.com/questions/375704/why-should-i-use-foreign-keys-in-database Why should I use foreign keys in database? In my 10+ years of experience in the IT field, I have never used foreign keys in any of my projects and I never ..
-
Json Web TokenProject/NestJS 2023. 2. 25. 13:39
정리 정의 : JSON을 이용해 데이터를 저장하는 웹 토큰 구성 : header/payload/signature로 구성 저장 위치 : 웹 스토리지 또는 쿠키 사용 사례 : 토큰을 이용한 인증에 주로 사용 장점 : 세션 기반 인증 방식과 비교 시 서버에 정보를 저장하지 않기 때문에 서버의 확장성이 좋고, 서버에 걸리는 부하가 적음 단점 : payload는 JWT decode만 하면 정보가 노출되므로 민감한 정보는 담을 수 없음 참조 https://hudi.blog/session-based-auth-vs-token-based-auth/ 세션 기반 인증과 토큰 기반 인증 (feat. 인증과 인가) 인증과 인가 세션기반 인가와 토큰기반 인가에 대해 알아보기 이전에 먼저, 인증과 인가가 무엇인지 부터 알아야할 필..
-
백준 16937 nodejs백준/브루트포스 알고리즘 2023. 2. 23. 11:55
문제 https://www.acmicpc.net/problem/16937 16937번: 두 스티커 첫째 줄에 모눈종이의 크기 H, W, 둘째 줄에 스티커의 수 N이 주어진다. 다음 N개의 줄에는 스티커의 크기 Ri, Ci가 주어진다. www.acmicpc.net 풀이 하나의 스티커를 기준으로, 나머지 스티커를 아래쪽이나 오른쪽으로 붙일 수 있다. (위쪽이나 왼쪽에 붙인 경우는 각각 아래쪽이나 오른쪽으로 붙인 경우와 동일하다.) 두 스티커 및 모눈종이의 회전까지 고려하여 경우의 수를 구한다. let [[H, W], [N], ...I] = `${require('fs').readFileSync(0)}`.trim().split`\n`.map(e => e.split` `.map(Number)) let [o, F]..
-
백준 16931 nodejs백준/기하학 2023. 2. 22. 13:59
문제 https://www.acmicpc.net/problem/16931 16931번: 겉넓이 구하기 크기가 N×M인 종이가 있고, 종이는 1×1크기의 칸으로 나누어져 있다. 이 종이의 각 칸 위에 1×1×1 크기의 정육면체를 놓아 3차원 도형을 만들었다. 종이의 각 칸에 놓인 정육면체의 개수가 주어 www.acmicpc.net 풀이 6개의 면에서 봤을 때의 겉넓이를 각각 구해서 더해준다. 위/아래에서 본 면들의 겉넓이는 2 * N * M이다. 나머지 면들에서의 겉넓이는 시작 면 + (면의 크기가 증가할 때 큰 면 - 작은 면의 총합)과 같다. let [[N, M], ...I] = `${require('fs').readFileSync(0)}`.split`\n`.map(e => e.split` `.map(..
-
백준 2812 nodejs백준/스택 2023. 2. 21. 17:11
문제 https://www.acmicpc.net/problem/2812 2812번: 크게 만들기 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 풀이 Stack을 이용한다. K의 값이 존재하는 한 수를 왼쪽부터 오름차순이 되도록 지워야 한다. 수 전체를 반복하고도 K가 남아있는 경우 뒤에서부터 잘라준다. let [[, K], [X]] = `${require('fs').readFileSync(0)}`.trim().split`\n`.map(e => e.split` `) const S = [] for (let i in X) { while (S.length && S[S.length - 1] 0..
-
백준 1700 nodejs백준/그리디 2023. 2. 19. 11:46
문제 https://www.acmicpc.net/problem/1700 1700번: 멀티탭 스케줄링 기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전 www.acmicpc.net 풀이 그리디 알고리즘을 이용한다. 해당 기기가 멀티탭에 꽂혀있는지 확인한다. 꽂혀있지 않다면, 콘센트에 남은 칸이 있는지 확인한다. 남은 칸이 없다면, 앞으로 사용하지 않을 콘센트를 뽑는다. 앞으로 사용하지 않을 콘센트가 없다면, 가장 나중에 사용할 콘센트를 뽑는다. let [[N, K], I] = `${require('fs').readFileSync(0)}`.trim().split`\n`...
-
백준 2437 nodejs백준/그리디 2023. 2. 17. 13:35
문제 https://www.acmicpc.net/problem/2437 2437번: 저울 하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓 www.acmicpc.net 풀이 추를 이용해 만들 수 있는 가장 큰 연속된 수 o를 초기화한다. 오름차순으로 정렬된 저울에 추 x를 하나씩 추가한다. o + 1보다 x가 크면 연속된 수 o가 더 이상 커질 수 없다. let [[N], I] = `${require('fs').readFileSync(0)}`.trim().split`\n`.map(e => e.split` `.map(Number)) I.sort((a, b) => a -..