목록전체 글 (768)
우노
리스트(List) 가변(Mutable) : 요소의 추가, 삭제, 변경이 가능합니다. 대괄호 []를 사용하여 생성합니다. 중복된 요소를 가질 수 있습니다. 순서가 있어 인덱스를 통해 요소에 접근 가능합니다. 주로 동적인 데이터 관리에 사용됩니다. my_list = [1, 2, 3] my_list.append(4) # 추가 my_list[1] = 5 # 변경 del my_list[0] # 삭제 튜플(Tuple) 불변(Immutable) : 한 번 생성된 후에는 요소의 추가, 삭제, 변경이 불가능합니다. 소괄호 ()를 사용하여 생성합니다. 중복된 요소를 가질 수 있습니다. 순서가 있어 인덱스를 통해 요소에 접근 가능합니다. 주로 데이터의 불변성이 필요한 경우에 사용됩니다. my_tuple = (1, 2, 3)..

Xcoms란? XComs(Cross-Communications)는 Apache Airflow에서 태스크 간에 메시지나 데이터를 교환하기 위한 메커니즘입니다. Xcoms를 통해 한 태스크가 생성한 데이터를 다른 태스크가 사용할 수 있으며, 이는 태스크 간의 의존성 관리와 데이터 공유에 매우 유용합니다. XComs는 Key-Value 쌍으로 데이터를 저장하며, Airflow의 메타데이터 데이터베이스에 저장됩니다. 예제 코드 태스크에서 데이터를 XCom에 push하는 가장 간단한 방법은 태스크의 실행 함수에서 값을 반환하는 것입니다. Airflow는 반환된 값을 자동으로 XCom에 push합니다. @task def push_task(): # XCom으로 메시지를 push return 'Hello fro..

ShortCircuitOperator란? 지정된 조건이 참(True)일 때만 다운스트림 작업을 실행하는 Operator입니다. 지정된 조건이 거짓(False)이라면, ShortCircuitOperator는 다운스트림 작업의 실행을 건너뜁니다. ignore_downstream_trigger_rules 설정 ShortCircuitOperator가 거짓(False)된 조건으로 인하여 다운스트림 작업을 건너뛸 때, 다운스트림 작업들의 트리거 규칙을 무시할 것인지 결정하는 설정입니다. ignore_downstream_trigger_rules=True를 적용한 경우 (기본 설정) 조건이 참(True)일 때 : ShortCircuitOperator 뒤에 오는 모든 다운스트림 작업을 실행합니다. 조건이 거짓(False..
들어가기 앞서, 해당 포스팅에선 Terraform을 통해, GCP Load Balancer에 특정 IP 접근만 허용하는 방법에 대해서 다뤄보겠습니다. 결론부터 말씀드리면, Google Cloud Armor security policy를 google_compute_backend_service에 연결하는 방식으로 접근 제어를 설정할 수 있습니다. google_compute_backend_service는 Google Cloud Load Balancing 사용 시, 트래픽을 여러 인스턴스 그룹에 분산하는 데 사용되는 리소스이며, 해당 리소스의 추가적인 설명은 아래 링크를 참고하시면 됩니다. https://wooono.tistory.com/699 Google Cloud Armor security policy는 g..
들어가기 앞서, 해당 포스팅에선 GCP Pub/Sub Topic에 Message를 Publish하는 간단한 예제 코드를 다뤄보겠습니다. 테스트를 위한 간단한 코드이기 때문에, 필요에 따라 수정해서 사용하시면 됩니다 ㅎㅎ.. 예제 코드 from google.cloud import pubsub_v1 import json # 프로젝트 ID 및 서비스 계정 키 파일 경로 설정 project_id = "your-project-id" key_file_path = "path/to/your/service-account-file.json" # Pub/Sub 클라이언트 초기화 pubsub_client = pubsub_v1.PublisherClient.from_service_account_file(key_file_path)..
문제 링크 https://www.acmicpc.net/problem/2011 풀이 마지막 숫자까지 해석할 수 있는 경우의 수는 아래 두 가지 경우의 수의 합과 같습니다. 마지막 1개 숫자 이전의 숫자들로 가능했던 경우의 수 마지막 2개 숫자 이전의 숫자들로 가능했던 경우의 수 따라서, “251”을 해석할 수 있는 경우의 수는 아래 두가지 경우의 수의 합과 같습니다. “마지막 1개 숫자 이전의 숫자들로 가능했던 조합” + “1” 즉, “25”의 경우의 수와 동일합니다. 마지막 1개의 숫자가 0 이상이기 때문에 가능합니다. “마지막 2개 숫자 이전의 숫자들로 가능했던 조합” + “51” 즉, “2”의 경우의 수와 동일합니다. 해당 경우엔 마지막 2개의 숫자가 10 이상 26 이하가 아니기 때문에 불가능합니다..

문제 링크 https://www.acmicpc.net/problem/2293 풀이 우선, 동전 1원으로 10을 만들 수 있는 경우의 수와 동전 1, 2원으로 10을 만들 수 있는 경우의 수를 구함으로써 규칙을 찾을 수 있습니다. 즉, 새로 갱신되는 dp[n]의 값은 이전의 dp[n]의 값에 dp[n - 현재 사용한 동전의 종류 크기] 가 됩니다. 해당 규칙을 통해 1, 2, 5원으로 10을 만들 수 있는 경우의 수를 계산할 수 있습니다. 추가적으로, dp[0]은 주어진 동전을 통해 0원을 만들 수 있는 경우의 수인데, 아무 동전을 사용하지 않았을 때 0을 만들 수 있으므로, 경우의 수는 1입니다. 코드 import sys n, k = map(int, sys.stdin.readline().split()) ..
문제 링크 https://www.acmicpc.net/problem/17609 풀이 왼쪽 포인터 값과 오른쪽 포인터 값이 동일할 경우, 양쪽 포인터를 그 다음 포인터로 이동 왼쪽 포인터 값과 오른쪽 포인터 값이 동일하지 않을 경우 왼쪽 포인터를 오른쪽으로 이동했을 때, 양쪽 포인터 내부 문자열이 회문이 되는지 확인 오른쪽 포인터를 왼쪽으로 이동했을 때, 양쪽 포인터 내부 문자열이 회문이 되는지 확인 나머지 경우(회문이나 유사회문도 아닌 일반 문자열인 경우) 코드 import sys t = int(sys.stdin.readline()) for i in range(t): result = 0 str = list(sys.stdin.readline().rstrip()) left_idx = 0 right_idx =..
문제 링크 https://www.acmicpc.net/problem/2812 풀이 큰 수가 되려면 높은 자리수의 숫자가 커야합니다. 그래서 스택을 이용합니다. 예를 들어, 4177252841 이고 k = 4이면 775841이 최대값이겠죠? 먼저 4를 stack에 집어넣습니다. stack = [4] 다음 1을 stack에 넣어야 하는데, stack의 최근 값인 4보다 1이 작거나 같죠? 그래서 그냥 stack에 1을 넣습니다. stack = [4, 1] 다음 7을 stack에 넣어야 하는데, stack의 최근 값인 1보다 7이 크죠? 그래서 1을 pop 합니다. stack = [4], k = 3 아직 stack의 최근 값인 4보다 7이 크죠? 그래서 4를 pop 합니다. stack = [], k = 2 이..
리소스를 생성하지 않고 리소스 구성 파일만 출력 kubectl 시, 리소스를 생성하지 않고 리소스 구성 파일만 출력할 수 있는 옵션이 있습니다. kubectl run redis \ --image=redis \ --dry-run=client \ -o yaml \ > redis-definition.yaml --dry-run=client : 명령어를 실행하지 않고 구성만을 출력합니다. -o yaml : 출력 형식을 YAML로 지정합니다. > redis-definition.yaml : 명령어의 출력을 파일에 저장합니다.