백준 / 1074 / Z / python
·
카테고리 없음
문제: https://www.acmicpc.net/problem/1074 코드def z(N, r, c): if N == 0: return 0 half = 2 ** (N - 1) block_size = half * half # 1번 사분면 if r = half: return block_size + z(N - 1, r, c - half) # 3번 사분면 elif r >= half and c 배열을 계속 4개의 사분면으로 나누며 r,c가 어느 사분면에 속하는지 확인하고, 그 사분면 이전에 이미 방문한 칸 수를 누적해서 더해 나간다. 해당 사분면 내부의 상대 좌표로 이동해 다시 같은 방식으로 계산하며, 결국 N이 0이 되면 더 나눌 수 없으므로 ..
Programmers / 오랜 기간 보호한 동물(2) / MySQL
·
DB | SQL
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/59411 코드SELECT A.ANIMAL_ID, A.NAMEFROM ANIMAL_INS A JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_IDORDER BY DATEDIFF(B.DATETIME, A.DATETIME) DESC LIMIT 2; MySQL에서 날짜 차이를 구할 때 DATEDIFF, TIMESTAMPDIFF 함수를 사용 DATEDIFF : 날짜1 - 날짜2 DATEDIFF(날짜1, 날짜2); TIMESTAMPDIFF : 단위 기준 날짜2 - 날짜1TIMESTAMPDIFF(단위, 날짜1, 날짜2); - 단위의 종류SECOND : 초MINUTE..
백준 / 9466번 / 텀 프로젝트 / python 파이썬
·
Coding Test/Baekjoon
문제 : https://www.acmicpc.net/problem/9466 나의 풀이import syssys.setrecursionlimit(10**7)input = sys.stdin.readline# 사이클 생성 유무 확인def dfs(now): global cnt visited[now] = 1 nxt = numbers[now] if not visited[nxt]: dfs(nxt) else: # 이미 방문했는데 탐색이 끝나지 않았다면 # 현재 경로에 있는 노드를 다시 봤다는 의미 -> 사이클 발생 if not finished[nxt]: cur = nxt while cur != now..
Redis로 Rate Limiting 구현하기
·
Development & Projects
AI 분리배출 애플리케이션 "이건 여기"를 개발할 때 Redis를 이용해서 Rate Limit을 구현했던 과정을 기록해 보려고 합니다. 애플리케이션 내 설명 모드는 사용자가 질문을 하고 질문하기 버튼을 누르면 서버의 Prompt Engineering 기반으로 학습된 Gemini가 응답을 생성하는 구조였습니다. 이때 Gemini API를 연결해두었기 때문에 사용자가 질문하기 버튼을 무한클릭하게 된다면 그만큼 API 호출이 폭증하고 비용 폭탄을 맞게될 것입니다. 또한 Rate Limiting은 DDoS 공격을 막는 보안 장치로서도 매우 중요합니다. 누군가 의도적으로 짧은 시간 안에 수백, 수천 번의 요청을 보내면 Gemini API뿐 아니라 서버 전체가 마비될 수 있는 위험이 있기에, 이러한 트래픽 폭주..
Programmers / 고양이와 개는 몇 마리 있을까 / MySQL
·
DB | SQL
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/59040 코드SELECT ANIMAL_TYPE, COUNT(*) AS countFROM ANIMAL_INS GROUP BY ANIMAL_TYPEORDER BY ANIMAL_TYPE; 처음엔 ANIMAL_TYPE이 개와 고양이 말고도 있지 않을까 싶었고 혹시나 해서 제출했는데 통과가 되었다. SELECT ANIMAL_TYPE, COUNT(*) AS countFROM ANIMAL_INSWHERE ANIMAL_TYPE IN ('Cat', 'Dog')GROUP BY ANIMAL_TYPEORDER BY CASE ANIMAL_TYPE WHEN 'Cat' THEN 1 WHEN 'Dog'..
카나리(Canary) 배포란?
·
카테고리 없음
1. 카나리 배포의 개념카나리 배포는 새 버전을 일부 사용자에게만 먼저 적용하고, 문제가 없으면 점차 전체로 확장하는 점진적 배포 전략입니다. 2. 카나리 배포를 사용하는 이유?카나리 배포의 핵심 목적은 ‘리스크 최소화’입니다.전체 사용자에게 바로 배포했다가 생길 수 있는 버그, 장애, 성능 저하를 방지테스트 환경에서는 잡히지 않는 실제 운영 환경의 문제를 조기에 발견문제가 발생하더라도 영향을 받는 범위가 작아 빠른 롤백과 복구가 가능 카나리아 배포를 사용하면 애플리케이션을 부분적으로 출시할 수 있으므로, 모든 사용자에게 새 버전의 애플리케이션을 제공하기 전에 안정성을 확인할 수 있습니다. 3. 동작 방식카나리 배포는 일반적으로 다음 단계를 거칩니다.새 버전 준비기존 버전(Stable)과 새로운 버전(..
Programmers / 오랜 기간 보호한 동물(1) / MySQL
·
DB | SQL
문제: https://school.programmers.co.kr/learn/courses/30/lessons/59044 코드SELECT A.NAME, A.DATETIMEFROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_IDWHERE B.ANIMAL_ID IS NULLORDER BY A.DATETIME LIMIT 3; LEFT JOIN으로 B의 ANIMAL_ID가 NULL인 경우 -> 아직 보호소에 있는 동물LIMIT 3으로 상위 3마리만 출력
Programmers / 비밀 코드 해독 / Python
·
Coding Test/Programmers
문제: https://school.programmers.co.kr/learn/courses/30/lessons/388352 코드from itertools import combinationsdef solution(n, q, ans): count = 0 num = list(range(1, n + 1)) correct = list(combinations(num, 5)) for cor in correct: is_correct = True for code, answer in zip(q, ans): if len(set(cor) & set(code)) != answer: is_correct = False ..