전체 글 50

[백준] 11054 가장 긴 바이토닉 부분 수열 python 풀이

문제난이도: 골드4알고리즘 분류: 다이나믹 프로그래밍요약: 수열 A의 부분 수열 중에서 가장 긴 바이토닉 수열의 길이를 출력하기 풀이가장 긴 바이토닉 수열을 갖기 위해 (증가하는 수열의 길이 + 감소하는 수열의 길이)가 최대가 되는 수열을 찾아야 한다. 이를 위해 dp 배열을 사용하여 dp[i]에 arr[i]를 마지막 원소로 가지는 부분 수열에서의 최대 길이를 저장한다. 예제로 주어진 수열을 살펴보면수열1 5 2 1 4 3 4 5 2 1i번째 원소를 마지막으로 하는 증가하는 부분 수열의 최대 길이1 2 2 1 3 3 4 5 2 1i번째 원소를 마지막으로 하는 감소하는 부분 수열의 최대 길이1 2 3 3 3 4 1 2 5 1두 수열의 합2 7 4 2 7 6 7 8 4 2가장 긴 바이토닉 수열은 8번째 원소..

Algorithm/Baekjoon 2024.07.02

[백준] 27172 수 나누기 게임 python 풀이

문제난이도: 골드5알고리즘 분류: 수학, 브루트포스 알고리즘, 정수론, 소수 판정, 에라토스테네스의 체요약: 서로 다른 수가 적힌 카드가 있고 수 나누기 게임을 모두 진행했을 때, 각 플레이어의 점수를 출력하기 풀이모든 수에 대해 두개씩 비교를 진행하면 시간복잡도가 O(N^2)이다. 입력 크기가 최대 100,000개이기 때문에 시간 초과가 발생한다. 모든 숫자 쌍을 직접 비교하는 대신, 효율적으로 문제를 해결하기 위해 에라토스테네스의 체 알고리즘의 개념을 응용하여 해결할 수 있다. 나머지가 0이라는 뜻은 한쪽이 다른 쪽의 배수라는 뜻이다. 각 플레이어가 가진 수의 배수 관계만 비교해가며 빠르게 확인한다. 비교 대상이 줄어 모든 수를 확인하지 않아도 되고, 에라토스테네스의 체와 유사한 시간복잡도를 보인다...

Algorithm/Baekjoon 2024.07.02

[TypeORM] EntityRepository is deprecated 해결하기

TypeORM 0.3.x 버전에서 @EntityRepository 데코레이터를 사용하여 Repository를 생성하려고 하면 'EntityRepository' is deprecated 오류가 발생하는 것을 볼 수 있습니다.0.3.x 버전부터 @EntityRepositry를 Deprecate한 이유@EntityRepositry 사용을 Deprecate한 주된 이유는 개발자 커뮤니티 내에서 나타난 다양한 구현상의 문제점과 설계 철학의 변화 때문이라고 합니다.먼저 @EntityRepository를 사용하면, 특정 엔티티에 대한 쿼리 로직이나 비즈니스 로직이 하나의 클래스 내에 혼합될 수 있습니다. 이는 단일 책임 원칙을 위배하는 것으로 간주되며, 결과적으로 코드의 유지보수성이 저하될 수 있습니다.또한, 다른 ..

Backend Roadmap/Web 2024.07.02

사용자 인증을 관리하는 방법

HTTP의 특성 - 무상태 (Stateless)HTTP는 서버-클라이언트 모델을 따르는 프로토콜로, 클라이언트가 서비스를 요청하고 서버가 이에 응답함으로써 데이터를 교환합니다. HTTP는 무상태성과 비연결성이라는 특징을 가지고 있습니다. 여기서 주목할 특징은 무상태성으로, 서버가 클라이언트를 상태를 보존하지 않는다는 것입니다. 그래서 서버는 클라이언트의 이전 요청에 대한 정보를 기억하지 않으므로, 요청을 할 때마다 새로 서버에 연결해야 합니다. 로그인 시스템에서 권한 부여하기로그인 시스템에서 Authorization(권한 부여)는 중요한 역할을 수행합니다. 이를 통해 로그인 상태를 유지하는 사용자만이 특정 기능을 이용할 수 있습니다. API 요청을 할 때마다 로그인을 반복할 수 없으므로 로그인 상태를 유..

Backend Roadmap/Web 2024.07.02

[백준] 12865 평범한 배낭 python 풀이

문제난이도: 골드5알고리즘 분류: 다이나믹 프로그래밍, 배낭 문제요약: 배낭에 넣을 수 있는 무게의 최댓값이 주어지고 일정 무게와 가치가 있는 짐이 있을 때, 가치의 합이 최대가 되도록 하는 값을 출력하기 풀이Knapsack 문제배낭에 넣을 수 있는 무게의 최댓값이 주어지고 일정 무게와 가치가 있는 짐이 있다. 이때, 최대 용량을 초과하지 않으면서 배낭에 넣을 수 있는 최대 가치의 합을 찾는 문제이다.배낭에 짐을 넣을 때, 짐을 쪼갤 수 있는 경우와 쪼갤 수 없는 경우가 존재한다.쪼갤 수 있는 경우 -> 분할가능 배낭문제 (Franction Knapsack Problem)쪼갤 수 없는 경우 -> 0-1 배낭문제 (0-1 Knapsack Problem)이 문제는 0-1 배낭문제로, 각 물건에 대해 넣기/안..

Algorithm/Baekjoon 2024.06.28

Mac에서 Spotlight 검색 안됨 해결

Spotlight 검색이 제대로 작동하지 않는 경우, Spotlight 데이터베이스가 손상되었을 수 있으므로 인덱스를 재구축해야 한다. 방법11. 시스템 환경설정 > Spotlight에 들어간다.2. 개인정보보호 탭에 들어가서 + 버튼을 눌러 다시 색인화할 폴더나 디스크를 선택해 추가한다. (최상위 디스크를 선택하라고 한다.)3. 추가한 폴더나 디스크를 선택해 - 버튼을 눌러 목록에서 제거한다.Apple에서 제공한 가이드대로 했는데 해결이 안 됐다. 방법21. 터미널에서 sudo -i 를 입력해서 루트 권한으로 로그인한다.2. mdutil -Ea 로 시스템의 모든 드라이브에 대해 Spotlight 검색 인덱스가 재구축한다.mdutil: Spotlight 관리 도구를 가리키는 명령어-E 옵션: Spotli..

ETC 2024.06.28

[백준] 17406 배열 돌리기 4 python 풀이

문제난이도: 골드4알고리즘 분류: 구현, 브루트포스, 백트래킹요약: 주어진 배열에 여러 회전 연산을 각각 한 번씩 적용하며, 이 연산들의 순서를 자유롭게 변경하여 회전한 후 얻을 수 있는 모든 배열 중 최솟값을 찾아 출력하기 풀이순열backtracking을 이용해서 순열을 구현할 수 있지만, itertools 모듈의 permutations 함수를 통해 더 빠르게 구할 수 있다.permutations(객체 n, 뽑을 개수 r)객체: [[a,b,c], [d,e,f]]반환값: ([a,b,c], [d,e,f]), ([d,e,f], [a,b,c]) 경우의 수에 대한 쌍을 튜플 형식으로 리턴하나의 회전 순열이 다른 순열에 영향이 가지 않도록 deepcopy를 통해 복사를 진행해야한다. 회전회전 연산에 대해 r,..

Algorithm/Baekjoon 2024.06.28

MySQL 문법 정리

프로그래머스 SQL 고득점 KitCONCATCONCAT(문자열1, 문자열2, ..., 문자열N) 둘 이상의 문자열을 순서대로 합쳐서 반환해주는 함수SUBSTRSUBSTR(원본문자열, 시작위치, 길이) 문자열을 시작위치부터 해당 길이만큼 잘라서 반환하는 함수길이 생략할 경우, 끝까지 가져옴시작위치가 음수일 경우, 뒤에서부터 자르기IFNULLIFNULL(컬럼명, 'NULL일 경우 대체 값') 해당 컬럼의 값이 NULL을 반환할 때, 다른 값으로 출력할 수 있도록 하는 함수LIKE문자열 내에서 조건에 부합하는 문자열을 찾는 함수, 와일드카드 문자와 함께 사용됨WILDCARDDESC%0개 이상의 문자를 표현_1개의 문자를 표현와일드카드를 이용하면 NULL값이 들어간 데이터 검색은 불가능함 CASE WHEN TH..

ETC 2024.06.28

[백준] 1253 좋다 python 풀이

문제난이도: 골드4알고리즘 분류: 자료구조, 정렬, 이분 탐색, 두 포인터요약: n개의 수가 주어졌을 때, 이 중 어떤 수가 다른 두 수의 합으로 표현될 수 있는 수의 개수 출력하기 풀이예외 처리타겟과 다른 두 수의 합으로 표현 -> 타겟을 제외한 temp 리스트 생성 시간 복잡도1) Two Pointers 탐색배열 정렬 -> O(N logN)하나의 타겟마다 두 인덱스 변수를 사용해서 O(N) 시간이 소요되기 때문에 모든 원소에 대한 탐색을 진행하면 O(N^2)전체 시간복잡도: O(N^2)2) Brute Force 탐색배열 정렬 -> O(N logN)하나의 타겟에 대해 조합 가능한 숫자 쌍을 확인하려면 이중 for문 사용 O(N^2), 모든 원소에 대한 탐색을 진행하면 O(N^3)전체 시간복잡도: O(N..

Algorithm/Baekjoon 2024.06.28

[백준] 17609 회문 python 풀이

문제난이도: 골드5알고리즘 분류: 문자열, 두 포인터요약: 주어진 문자열이 회문인지 유사 회문인지 일반 문자열인지 출력하기 풀이회문 판단left, right 변수를 사용해서 투 포인터로 풀이 유사회문 판단중간에 일치하지 않는 문자가 나왔을 경우1) 해당 위치에서 왼쪽 값 제거 후, 나머지 문자가 회문인지2) 해당 위치에서 오른쪽 값 제거 후, 나머지 문자가 회문인지 확인1), 2)에서 회문이 아니면 (다른 문자 개수 >= 2) 일반 문자열로 처리 코드import sysinput = sys.stdin.readlineT = int(input())def is_palindrome(word): left = 0 right = len(word) - 1 while left

Algorithm/Baekjoon 2024.06.28