Immersion In Data

분류 전체보기 196

백준 2798번 : 블랙잭

https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net import itertools n, m = map(int, input().split()) numbers = list(map(int, input().split())) result = 0 for number in itertools.combinations(numbers, 3): if result < sum(number)

Python/Baekjoon 2022.11.21

Airflow 설치

Airflow란? Airflow는 Python 코드로 워크플로우(workflow)를 작성하고, 스케줄링, 모니터링하는 플랫폼이다. Airflow를 통해 데이터엔지니어링의 ETL 작업을 자동화하고, DAG(Directed Acyclic Graph) 형태의 워크플로우 작성이 가능하다. 이를 통해 더 정교한 dependency를 가진 파이프라인을 설정할 수 있다. 또한 AWS, GCP 등 Airflow managed service를 제공할 정도로 전세계 데이터팀들에게 널리 사용되고 있으며 그만큼 넓은 커뮤니티를 형성하고 있다. Airflow 동작 원리 Scheduler : 모든 DAG와 Task에 대하여 모니터링 및 관리하고, 실행해야할 Task를 스케줄링한다. Web server : Airflow의 웹 UI..

Airflow 2022.11.18

[Python] 8. 구현

1. 구현 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정 완전 탐색 : 모든 경우의 수를 주저 없이 다 계산하는 해결 방법 시뮬레이션 : 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행 2. 파이썬에서 리스트 크기 대체로 코딩 테스트에서는 128~512MB로 메모리를 제한하는데, 이럴 때는 메모리 제한을 염두해두고 코딩을 해야 한다. 아래는 우리가 흔히 사용하는 int 자료형의 데이터 개수이다. 데이터의 개수(리스트의 길이) 메모리 사용량 1,000 약 4KB 1,000,000 약 4MB 10,000,000 약 40KB 파이썬은 다른 언어에 비해 구현상의 복잡도는 낮지만, 데이터 처리량이 많을 때는 꼭 메모리 제한을 고려하자. 만약, 크기가 1,000 이상인 리스트가 있다면, 메모리 용량 제한..

백준 5585번 : 거스름돈

https://www.acmicpc.net/problem/5585 5585번: 거스름돈 타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사 www.acmicpc.net a = 1000 - int(input()) change = [500, 100, 50, 10, 5, 1] count = 0 for coin in change: count += a // coin a %= coin print(count)

Python/Baekjoon 2022.11.16

[Python] 7. 그리디

1. 그리디 어떤 문제가 있을 때 단순 무식하게, 탐욕적으로 문제를 푸는 알고리즘(현재 상황에서 지금 당장 좋은 것만 고르는 방법) 그리디 알고리즘은 기준에 따라 좋은 것을 선택하는 알고리즈이므로 문제에서 '가장 큰 순서대로', '가장 작은 순서대로'와 같은 기준을 알게 모르게 제시해준다. 대체로 이 기준은 정렬 알고리즘을 사용했을 때 만족시킬 수 있으므로 자주 정렬 알고리즘과 짝을 이룬다. 거스름돈 문제로 예를 들면, '가장 큰 화폐 단위부터' 돈을 거슬러 주는 것' 처럼 간단한 아이디어를 떠올려 문제를 해결할 수 있다. n = 1260 count = 0 # 큰 단위의 화폐부터 차례대로 확인 coin_types = [500, 100, 50, 10] for coin in coin_types: count ..

백준 6603번 : 로또

https://www.acmicpc.net/problem/6603 6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 www.acmicpc.net import itertools while True: k, *S = map(int, input().split()) S.sort() if k == 0: break for result in itertools.combinations(S, 6): print(' '.join(map(str, result))) print()

Python/Baekjoon 2022.11.14

백준 1759번 : 암호 만들기

https://www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net import itertools vowels = ['a', 'e', 'i', 'o', 'u'] # 5개의 모음 정의 L, C = map(int, input().split()) # 가능한 암호를 사전식으로 출력해야 하므로 입력 이후에 정렬 수행 array = input().split() array.sort() # 길이가 L인 모든 암호 조합을 확인 for password in itertools.combin..

Python/Baekjoon 2022.11.14

[Python] 6. 순열과 조합

1. 순열(Permutation) 서로 다른 n개에서 r개를 선택하여 일렬로 나열하는 것 import itertools data = [1, 2] for x in itertools.permutations(data, 2): print(list(x)) # [1, 2] # [2, 1] 2. 조합(Combination) 서로 다른 n개에서 순서에 상관없이 서로 다른 r개를 선택하는 것 import itertools data = [1, 2, 3] for x in itertools.combinations(data, 2): print(list(x), end=' ') # [1, 2] [1, 3] [2, 3] https://developersj.tistory.com/106 백준 1759번 : 암호 만들기 https://w..

백준 11659번 : 구간 합 구하기 4

https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net import sys N, M = map(int, input().split()) data = list(map(int, sys.stdin.readline().split())) sum_value = 0 prefix_sum = [0] for k in data: sum_value += k prefix_sum.append(sum_value) for prefix in range(M): ..

Python/Baekjoon 2022.11.14