목록분류 전체보기 (33)
채채
탐색(Search)이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 말한다. 대표적인 그래프 탐색 알고리즘으로는 DFS와 BFS가 있다. 코딩 테스트에서 매우 자주 등장하는 유형 스택 자료구조 먼저 들어온 데이터가 나중에 나가는 형식(선입후출)의 자료구조 입구의 출구가 동일한 형태로 스택을 시각화 할 수 있다. 리스트 자료형을 사용 append()와 pop() 함수 사용 # append()와 pop()을 사용한다. => 상수시간 O(N)만큼 거림 stack = [] stack.append(5) stack.append(2) stack.pop() print(stack[::-1]) # 최상단 원소부터 출력 print(stack) # 최하단 원소부터 출력 큐 자료구조 먼저 들어온 데이터가 먼저 나가는 ..
복잡도는 알고리즘의 성능을 나타내는 척도이다. 시간 복잡도: 특정한 크기의 입력에 대하여 알고리즘의 수행 시간 분석 공간 복잡도: 특정한 크기의 입력에 대하여 알고리즘의 메모리 사용량 분석 동일한 기능을 수행하는 알고리즘이 있다면, 일반적으로 복잡도가 낮을수록 좋은 알고리즘이다. 빅오 표기법(Big-O Notation) 가장 빠르게 증가하는 항만을 고려하는 표기법 예를들어 연산 횟수가 3N³ + 5N² + 1,000,000인 알고리즘이 있다고 할 경우. 빅오 표기법에서는 차수가 가장 큰 항만 남기므로 O(N³)으로 표기한다. 시간 복잡도 계산해보기 1. N개의 데이터의 합을 계산하는 예제 수행 시간은 데이터의 개수 N에 비례할 것임을 예측할 수 있다. 시간 복잡도: O(N) array = [3, 5, 1..
표준 입력 방법 input() 함수는 한 줄의 문자열을 입력 받는 함수. map() 함수는 리스트의 모든 원소에 각각 특정한 함수를 적용할 때 사용. 예시) 공백을 기준으로 구분된 데이터를 입력 받을 때 `data = list(map(int, input().split()))` 예시) 공백을 기준으로 구분된 데이터의 개수가 많지 않다면 `a, b, c = map(int, input().split())` 빠르게 입력 받기 사용자로부터 받는 입력의 갯수가 매우 많을 때, 입력을 최대한 빠르게 받아야 함 이진탐색, 정렬, 그래프 sys 라이브러리에 정의된 sys.stdin.readline() 메서드를 이용. 단, 입력 후 엔터(Enter)가 줄 바꿈 기호로 입력되므로 rstrip() 메서드를 함께 사용 impo..
사전 자료형은 키(Key)와 값(Value)의 쌍을 데이터로 가지는 자료형이다. 사전 자료형은 키와 값의 쌍을 데이터로 가지며, 원하는 '변경 불가능한 자료형'을 키로 사용한다. 파이썬의 사전 자료형은 해시 테이블을 이용하므로 데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있다. data = dict() data['사과'] = 'Apple' data['바나나'] = 'Banana' data['코코넛'] = 'Coconut' print(data) dif = { '사과': 'Apple' '바나나': 'Banana' '코코넛': 'Coconut' } print(dif) if '사과' in data: print("'사과'를 키로 가지는 데이터가 존재합니다.") 사전 자료형 관련 메서드 키 데이터만..
data = 'Hello World' print(data) data = "Don't you know \"Python\"?" print(data) 문자열 연산 문자열 변수에 덧셈(+)을 이용하면 문자열을 연결할 수 있다. 문자열 변수를 특정한 양의 정수와 곱하는 경우, 문자열이 그 값만큼 여러번 연결된다. 문자열에 대해서도 마찬가지로 인덱싱과 슬라이싱을 이용할 수 있다. 다만 문자열은 특정 인덱스의 값을 변경할 수 없다. a = "Hello " b = "World" print(a + b) a = "String" print(a * 3) a = "ABCDEF" print(a[2:4]) 튜플 자료형 튜플은 한 번 선언된 값을 변경할 수 없다. 리스트는 대괄호([])를 이용하지만, 튜플은 소괄호(())를 이용한다..
리스트 초기화 - 리스트는 대괄호([])안에 원소를 넣어 초기화하며, 쉼표(,)로 원소를 구분한다. - 비어 있는 리스트를 선언하고자 할 때는 list() 혹은 간단히 []를 이용할 수 있다. # 직접 데이터를 넣어 초기화 a = [1, 2, 3, 4, 5, 6, 7, 8, 9] print(a) # 네 번째 원소만 출력 print(a[3]) # 크기가 N이고, 모든 값이 0인 1차원 리스트 초기화 n = 10 a = [0] * n print(a) 리스트의 인덱싱과 슬라이싱 연속적인 위치를 갖는 원소를 가져와야 할 때는 슬라이싱을 이용한다. - 대괄호 안에 콜론(:)을 넣어서 시작 인덱스와 끝 인덱스를 설정할 수 있다. - 끝 인덱스는 실제 인덱스보다 1을 더 크게 설정한다. a = [1, 2, 3, 4,..
모든 프로그래밍은 결국 데이터를 다루는 행위이다. 파이썬의 자료형으로는 정수형, 실수형, 복소수형, 문자열, 리스트, 튜플, 사전 등이 있다. 정수형(Integer)은 정수를 다루는 자료형으로 코딩테스트에서 출제되는 많은 문제들은 정수형을 주로 다루게 된다. # 양의 정수 a = 1000 print(a) # 음의 정수 a = -7 print(a) # 0 a = 0 print(a) 실수형(Real Number)은 소수점 아래의 데이터를 포함하는 수 자료형이다. 파이썬에서는 변수에 소수점을 붙인 수를 대입하면 실수형 변수로 처리된다. 소수부가 0이거나, 정수부가 0인 소수는 0을 생략하고 작성할 수 있다. # 양의 실수 a = 157.93 print(a) # 음의 실수 a = -1837.2 print(a) ..
✅ Terraform 테라폼(Terraform)은 하시코프(Hashicorp)에서 오픈소스로 개발중인 클라우드 인프라스트럭처 자동화 를 지향하는 코드로서의 인프라스트럭처(IaC)도구입니다. 쉽게 말해, 코드를 통해 인프라 서버를 구축/운영 할 수 있게 해주는 오픈 소스 소프트웨어입니다. - 활용 사례 (1) 자동화: AWS에서 새로운 서버를 생성하기 위해, AWS 콘솔에 로그인할 필요 없이. Terraform 코드를 실행시켜 서버를 생성한다. (2) 속도&안전: 코드로 실행되어 사람이 수동으로 작업하는 것 보다 훨씬 빠르며, 사람의 실수들을 방지할 수 있다. (3) 문서화: 모든 인프라가 코드로 기록 및 관리 되어 자동으로 문서화가 된다. (4) 형상관리: git을 통해 형상관리가 가능하며, 인프라의 변..
✅ MSA ✅ Event Driven Architecture (1) Event: 프로그램에 의해 감지되어 처리해야 할 하나의 동작 (2) EDA - 이벤트 발생에따라 트리거를 만들어, 송신자로부터 수신자로 이벤트를 비동기적으로 전송하고 처리하는 기술 - MSA 도입 시 발생하는 새로운 요구 사항을 달성하는 개념입니다. 서비스, DB의 분리, 폴리글랏 등에 대응해 효과적으로 동작합니다. EDM은 실패를 허용하는 분산 구조, 이벤트 브로커 등을 통해 문제를 해결하고 MSA 도입의 난관을 해결할 수 있도록 도와줍니다. (3) 발행-구독(Pub-Sub) 비동기 통신 - Rest와 달리 요청을 생성하는 서비스는(Publish) 요청을 소비하는 서비스(Subscribe)의 세부 정보(주소, 이벤트 수신 여부)를 알..
OIDC 공모전을 준비하는 스터디에서 로드맵을 짜고자 데브옵스 로드맵 사진을 들고 갔다. 처음보는 스택들이 많았고 모니터링과 로깅에 해당하는 Grafana와 ELK를 어디서 어떻게 언제 사용하는지 몰라 자료를 찾아보았다. 이 글을 통해 찾아본 정보들을 정리하고자 한다. 1. ELK란? 엘라스틱서치는 로여러 장비와 서비스에서 발생하는 로그들을 통합하고 검색하는 데 최적화된 솔루션이다. 로그를 별도의 복잡한 구성없이 바로 수집할 수 있다. 비츠를 이용해 적은 리소스로 로그들을 수집하고, 로그스태시로 다양한 필터를 통해 일원화된 형태로 가공하고, 엘라스틱서치로 대용량 로그를 빠른 인덱싱과 텍스트 검색을 통헤 로그들을 통합해 연관 분석을 지원할 수 있다. 또 키바나로 로그 UI나 대시보드를 사용해 모니터링을 할..