분류 전체보기 79

피보나치 수열과 DP[백준 피보나치 비스무리한 수열]

🧮 백준 14495번: 피보나치 비스무리한 수열오늘은 피보나치를 DP로 풀어내는 문제를 풀어볼 거에요.🧩 피보나치 수열?피보나치 수열이란 첫째, 둘째 항이 1이고 그 뒤의 항은 바로 앞의 두 항의 합인 수열입니다.F(n): 1, 1, 2, 3, 5, 8, 13, ...일반적으로 피보나치를 구하는 알고리즘을 코드로 구현할 때는 재귀함수를 사용합니다.def fivo(n): if n 이렇게 재귀함수로 피보나치 수열을 구할 경우 시간복잡도는 O(2^N) 이 됩니다.해당 시간복잡도는 O(n^2)보다도, n^3보다도 성능이 좋지 않습니다.그래서 우리는 이 경우를 피하기 위해, 그리고 DP를 배우기 위해 피보나치를 DP로 구현하게 됩니다.💡 DP(다이나믹 프로그래밍 | 동적 계획법)?자료들이 생각보다 많은..

Python/algorithm 2025.04.01

에라토스테네스의 체 [소수 구하기]

📌 백준 1929번: 소수 구하기오늘은 백준의 1929번 - 소수 구하기 문제를 풀면서에라토스테네스의 체를 활용하게 되었고, 이에 대해 간단히 정리해보려고 합니다.⏱️ 문제 조건과 제한입력: 자연수 M, N (1 ≤ M ≤ N ≤ 1,000,000)출력: M 이상 N 이하의 소수를 한 줄에 하나씩 출력시간 제한: 2초❌ 일반적인 소수 판별로는 시간 초과예를 들어, M=3, N=16이라면단순히 3부터 16까지 모든 수를 순회하며, 매 수마다 소수 판별을 하면각 수 i에 대해 2부터 i-1까지 나눠야 하므로시간 복잡도: O(N^2)→ 1,000,000 범위에서는 시간 초과 발생합니다.✅ 해결 전략: 에라토스테네스의 체이 문제는 "소수를 빠르게 구해야 하는 전형적인 문제"입니다.따라서 에라토스테네스의 체 알..

Python/algorithm 2025.03.31

Pydantic, Dataclass, TypedDict는 언제 쓰는 게 좋을까?

프로젝트를 진행하던 중 타입을 선택하는 것에 있어서 고민이 생겼고, 자료를 찾아가며 나름의 기준이 필요했다. 고민의 시작: dataclass 폭탄처음으로는 Dataclass를 사용하였는데 사용하며 좀 마구잡이로 쓴 경향이 있지 않나 싶다. 이 고민은 한 책[전문가를 위한 파이썬(2판]에서 말하기를  추가적인 메서드 동작없이 타입만을 체크하기 위해 Dataclass 로 선언한것이라면, 냄새를 유발할 수도 있다는 의견을 보고 시작되었다. 왜 정적 타입이 필요하지?동적 타이핑을 베이스로 두고 타입추론을 하는 파이썬은 다른 언어에 비해 유연하고 빠른 개발을 할 수 있는 특징이 있다. 하지만 여기서 정적 타입검사는 왜 나왔을까? 이건 동적 타입 언어의 특징에서 찾아 볼 수 있다. exam = "나는문자열"typ..

Python/core 2025.03.27

GKE에서 Outbound IP 고정하기

Google Cloud Platform(GCP)에서 제공하는 Google Kubernetes Engine(GKE)에서 Outbound IP를 고정하는 방법을 적어보겠습니당.우리는 가끔 서비스에 필요한 외부서비스의 API 호출 시 IP등록이 필요하고 등록되지 않은 IP 문제(401 Unauthorized)를 방지하기 위해 고정된 Outbound IP를 사용해야합니다.물론 일반 vm을 사용한다면 문제가 없겠지만, 쿠버네티스 환경에서는 노드마다 ip가 다르고 자동 프로비저닝이 되기 때문에 매번 새로운 ip를 등록할수 없어 고정된 ip를 사용해야하고 클러스터에서 고정 outbound ip를 위해서는 여러 방법을 사용해야합니다.이 중에서 제가 해결한 방법인 서브넷(Subnet), Cloud Router, Clou..

Infra/GCP 2025.03.11

__contains__

파이썬에서 요런 범위를 판단하는 코드를 작성해본적이 있을거에용.a = 10b = 20c = 15if a   이 코드를 좀더 Pythonic 하게 작성하는 방법에 대해 알아봐요. 먼저 파이썬은 객체 지향 언어입니다.여기서 우리는 판단할 범위를 클래스로 만들어 줄거에용class MyRange: def __init__(self, min, max): self.min = min self.max = maxma_range = MyRange(10,15)print(ma_range.min) # 10print(ma_range.max) # 15 자 ! 마레인지가 완성되었습니다.! min과 max가 잘 출력 되고있습니다.그러면 우리가 원하는 범위내에 포함되는 판단을 할수 있을까용?print( 1 ..

Python/core 2025.01.25

애플 텍스트 대치

애플(mac, iOS) 환경에서 텍스트 대치하는것을 알아봐용.나는 무심결에 스트레스로 인해 가까운사람과의 편한 대화에서 비속어 텍스트가 나오는 경우가 꽤 많다.배설하듯 작성하더라도 상대의 기분이 나쁘지않고 나중에 봤을때 나도 기분이 나쁘지않기위해,최종적으로 나 역시 비속어를 줄이기 위해 매우 귀여운 방법을 생각했다.예전에 게임에서 비속어를 입력하면  개'이런' , '이런','아이'(뭔지는 안적어도 알것이라 생각해용) 로 표현되는것 처럼 텍스트대치를 활용해서 스스로 필터링을 하려고 한다.[예시]ㅈㄴ => ヽ(°〇°)ノ18(유사 발음) => (╯°□°)╯︵ ┻━┻ 형태로 바꿔준다.  나의 감정을 표현하면서도, 기분이 나쁘지않다!방법은 간단하다.어떤os 환경에서든 설정을 들어가서 '텍스트 대치' 를 검색해준다..

etc 2025.01.21

싱글톤 패턴(Singleton pattern)

싱글톤 패턴이란, 특정 클래스가 프로그램 전체에서 오직 하나만 생성되도록 보장하는 패턴입니다. 또한 전역적으로 하나의 인스턴스를 유지하며, 리소스의 중복사용을 방지하고, 전역적인 접근 지점을 제공합니다. 싱글톤패턴을 사용하기 위해선 몇 가지 사항을 고려해야 합니다. 스레드 안전성: 멀티스레드 환경에서 싱글톤 인스턴스의 생성과 접근은 스레드 안전하게 관리되어야 합니다. 예외 처리: 초기화 과정에서 발생할 수 있는 예외 사항들을 적절히 처리해야 합니다. 자원 관리: 싱글톤으로 생성된 인스턴스가 사용하는 자원(파일 핸들, 네트워크 연결 등)은 적절히 관리하고 해제해야 합니다. 프로그램을 작성하다 보면 하나만 가지고 있어도 괜찮은 요소들이 있어서 싱글톤 패턴을 활용하여 리소스를 크게 줄일 수 있습니다. 아래 예..

DesignPattern 2023.11.21

SSL/TLS 와 mixed contents error

💡 웹사이트와 사용자 사이의 통신을 암호화하는 보안 프로토콜 SSL/TLS 는 개인 정보와 민감한 데이터를 안전하게 전송하기 위해 사용합니다. SSL/TLS? SSL(Secure Sockets Layer)은 웹 통신의 보안을 위해 사용되는 프로토콜로, 1996년에 SSL 3.0이 발표된 이후 업데이트되지 않았습니다. SSL은 알려진 여러 취약점이 있으며, 이로 인해 보안 전문가들은 SSL의 사용을 중단하고 TLS(Transport Layer Security)로 전환할 것을 권장하고 있습니다. 🛑 SSL이 취약한 공격 POODLE (Padding Oracle On Downgraded Legacy Encryption) 공격: SSL 3.0의 취약점을 이용한 공격으로, 암호화된 통신을 해독할 수 있습니다. D..

CS/Network 2023.11.06

도커 컨테이너에서 호스트 파일 접근 권한 문제 (docker uid)

Issue도커 컴포즈로 도커 실행시 File 권한 관련 에러가 발생원인도커에서 volumes 로 로컬(리눅스) 파일들과 매칭을 시켜 사용도커에서 로컬 (리눅스) 파일로 접근시 기타 유저로 권한이 잡힘컨테이너 내부에서 UID 확인시 1000으로 확인 💡 리눅스 커널을 공유하는 도커의 시스템 특성으로 인해 발생한 문제 ( 아래의 오른쪽 그림 )해결 해야할 문제리눅스에서 777 권한을 주지않고 문제를 해결해야함해결 방법1. 볼륨의 연결을 끊는다 .도커에서는 프로덕션 레벨에서 볼륨의 연결을 끊고 배포하는 것을 권장한다.💡 프로덕션 레벨의 환경에서 Docker 컨테이너를 사용할 때 볼륨을 끊고 배포하는 접근 방식을 선택하는 주된 이유는 보안과 데이터 격리 2. 도커를 실행할 때 user 를 지정해서 실행 해준..

Devops 2023.09.15

DB 인덱스에서 Hash보다 B-TREE 를 사용하는 이유

기본적으로 Hash Table은 탐색속도가 빠른 자료구조에용 그런데 왜 DB 인덱스에서는 Hash 가 아닌 B-TREE 구조를 사용할까용? B-Tree (Balanced Tree) 의 탐색 시간 복잡도는 O(logN) 에용 인덱스에 일반적으로 사용되는 자료구조는 B+TREE 구조에용 Hash Table 해시 테이블은 연관배열 구조를 이용해 key 에 value 를 저장하는 자료구조에용 연관배열구조 = key와 value 가 1:1 로 매칭되어있는 자료구조, key를 통해 value를 도출할수있음 해시 테이블의 Search(검색) 의 시간 복잡도는 기본적으로 O(1)이다. KEY에 매칭되는 VALUE 를 바로 찾기 때문이다. 그런데 이렇게 탐색시간이 빠른 Hash가 왜 인덱스에서 사용 되지 않을까용? 해시..

CS 2023.01.31