카테고리 126

파이썬 코딩테스트 참고자료 총 정리

나동빈님의 '이것이 코딩테스트다.'를 참고하여 필요한 부분만 따로 정리하였습니다. 복수의 특정 값 삭제하기 1. Python에서 리스트 삭제 시 복잡도는 O(N)이다. 2. 삭제 후 리스트 원소 위치를 조정하기 때문이다. 3. 따라서 여러 개 값은 삭제한다면, 복잡도는 O(N*logN)이다. 리스트 컴프리헨션을 활용해 O(N)으로 모든 특정값을 삭제할 수 있다. a=[1,2,3,4,5,5,5] remove_set={3,5} result = [i for i in a if i not in remove_set] print(result) 튜플 자료형 튜플 자료형의 특징과 시간복잡도 1. 튜플은 그래프 알고리즘 구현 시 자주 사용된다. 2. 다익스트라 최단 경로 알고리즘처럼 최단 경로를 찾아주는 알고리즘 3. 다..

알고리즘 2021.11.01

[누적합] 20159 동작 그만. 밑장 빼기냐?, 21318 피아노 체조

9. 20159 동작 그만. 밑장 빼기냐? 9.1. 문제유형 누적합 9.2. 풀이과정 밑장 빼기는 나, 상대방에게 주는 경우와 하지 않는 경우가 있다. 내 차례에 밑장을 빼는 경우, 상대방 차례에 밑장을 빼는 경우를 고려한다. 예를 들어 1,2,3,4,5,6,7,8,9,10을 대상으로 계산 후 점화식을 도출해 볼 수 있다. 점화식을 도출할 때, 미리 짝수/홀수 인덱스에 대한 누적합을 계산한 후 점화식에 활용한다. 9.3. 소스코드 n = int(input()) card = list(map(int, input().split())) mid = n//2 odd, even = card[0::2], card[1::2] answer = sum(odd) for i in range(1, mid): odd[i] += o..

알고리즘 2021.09.22

[누적합] 14465 소가 길을 건너간 이유 5, 5549 행성 탐사

7. 14465 소가 길을 건너간 이유 5 7.1. 문제유형 누적합, 슬라이딩 윈도우 7.2. 풀이과정 정상 신호등의 누적합 개수를 구한다. k개의 연속된 신호등을 구할 것이므로 i ~ i+k-1까지의 값을 계산한다. 2번 결과의 최대값을 구한다. k - 최대값 출력 7.3. 소스코드 from copy import deepcopy n,k,b = map(int, input().split()) sign=[1]*(n+1) psum=[0]*(n+1) sign[0]=0 for _ in range(b): broken = int(input()) sign[broken]=0 psum = deepcopy(sign) for i in range(1, n+1): psum[i] += psum[i-1] answer=0 for i ..

알고리즘 2021.09.21

[누적합] 21758 꿀 따기, 2632 피자 판매

5. 21758 꿀 따기 5.1. 문제유형 누적합 5.2. 풀이과정 누적합을 구한 후 꿀통의 위치를 기준으로 3가지 경우에 대해 각 10만번 연산을 수행하였다. 첫 번째는 꿀통이 오른쪽에 있는 경우 벌 한 마리는 가장 왼쪽에 위치 두 번째는 꿀통이 왼쪽에 있는 경우 벌 한마리는 가장 오른쪽에 위치 세 번째는 꿀통이 중간에 있는 경우 이 경우는 양 끝에 벌들이 위치한다. 누적합만 계산해 놓으면 2,3,4를 loop를 돌며 계산할 수 있으므로 O(N)에 해결할 수 있다. 5.3. 소스코드 from copy import deepcopy n=int(input()) h=list(map(int, input().split())) s = deepcopy(h) answer=0 for i in range(1, n): s[..

알고리즘 2021.09.20

[7 Week] 프로그래머스 - 실리콘밸리에서 날아온 데이터 엔지니어링 스타터 키트 with Python

⭐ Superset 오픈소스 대시보드 1. 설치 과정 Superset Direct Installation (Ubuntu) Superset Installation via Docker 깔끔하긴 하나, 좋은 사양의 서버 필요 Preset.io 사용 간편하게 사용 가능함 2. 설정 순서 Database 연결 DataSet 업로드 대시보드 시각화 Metrics → SIMPLE → AGGREGATE 선택 SQL 생각하며 설정하기 GROUP BY - SQL의 GROUP BY와 같음 시각화 후 Save Chart뿐만 아니라, Dashboard에도 저장할 수 있음 대시보드 화면에서 Edit 설정 가로, 세로, 헤더 등 필요한 정보 추가 가능 ⭐ 배운 것 데이터 웨어하우스를 기반으로 데이터 인프라를 만드는 것 파이썬, S..

[6 Week] 프로그래머스 - 실리콘밸리에서 날아온 데이터 엔지니어링 스타터 키트 with Python

⭐ Params 옵션 schema = context['params']['schema'] function 파라미터인 **context의 params를 익숙하게 사용해 볼 것 ⭐ 주의할 점 데이터 작업은 클린하게 Fail 하는 것이 좋다. try~exception 사용 시 raise를 사용할 것 raise 없을 시 except 처리 후 흘러가 버리므로 파악이 디버깅 어려움 ⭐ DW 구축 업무 순서 첫 번째는 프로덕션 DB를 DW로 복사해오는 것 프로덕션 DB는 OLTP로 MYSQL, Postgres / 데이터 웨어하우스는 OLAP OLTP의 목적은 빠르게 처리해서 응답하는 것 따라서 분석용으로 못씀. 분석용 쿼리 시 시간 지체되면 문제 발생 고로, DW 구축하기 위해 프로덕션 DB를 DW로 복사 ⭐ 데엔-데..

[5 Week] 프로그래머스 - 실리콘밸리에서 날아온 데이터 엔지니어링 스타터 키트 with Python

5️⃣ 주차 강의 내용 Airflow 시 혼란을 겪는 부분을 중점적으로 학습하였다. Autocommit 설정 autocommit = False일 때 내가 명시적으로 commit을 하기 전까지는 나에게만 그 변화가 보인다. 다른 사람들에게는 그 변화가 보이지 않는다. 예를 들어, 테이블을 삭제하고 조회하면 테이블이 없는 것으로 나온다. 하지만 다른 사람들에게는 여전히 테이블이 있는 것으로 조회가 됨 PostgresHook은 현재 autocommit = False를 반환함 autocommit = False일 때 주의할 점 쿼리문 실행 후 파이썬 try ~ exception와 commit;을 함께 사용하는 것이 best practice try ~ exception 시 ETL 운영상 관점에서 raise를 사용하..

[누적합] 11660 구간 합 구하기 5, 3020 개똥벌레

3. 11660 구간 합 구하기 5 3.1. 문제유형 누적합 3.2. 풀이과정 매 번 2중 for문을 계산할 시 시간초과가 발생할 것이다. 따라서 미리 누적합을 계산해 놓고, 구간별로 뽑아 리턴한다. 이 때, col 인덱스번호가 0이라면 종료값의 누적합을 덧셈한다. 시작 인덱스가 0이 아니라면 종료값 - 시작값을 덧셈한다. python 시간 초과 발생 -> pypy3로 통과 3.3. 소스코드 import sys input = sys.stdin.readline n, k = map(int, input().split()) nums = [list(map(int, input().split())) for _ in range(n)] for i in range(n): for j in range(1, n): nums[i..

알고리즘 2021.09.18

[누적합] 20438 출석체크 / 2015 수들의 합4

1. 20438 출석체크 1.1. 문제유형 누적합 원소별 합계를 구한 후 S[i] - S[i-1]을 활용해 문제를 풀어나간다. 1.2. 해결과정 전체 학생 수만큼 배열을 선언한다. 조는 학생을 체크한다. 출석 번호를 체크한다. 0번째부터 n+3까지 출석한 학생들의 누적합을 구한다. 구간 학생 수 - (누적합[구간 마지막값] - 누적합[구간 시작값]) 1.3. 소스코드 import sys input = sys.stdin.readline n,k,q,m = map(int, input().split()) sleep = [0]*(n+3) check = [0]*(n+3) for i in map(int, input().split()): sleep[i] = 1 for i in map(int, input().split(..

알고리즘 2021.09.16

[그리디] 1105 팔, 12904 A와 B

9. 1105 팔 9.1. 유형파악 그리디 그리디 유형은 정렬과 함께 출제될 확률이 높다. 문제 유형을 한 번에 파악하기 어려울 경우 그리디를 의심해볼 것 종종 DP, Graph 알고리즘과 함께 출제된다. 그리디는 반드시 최적의 해를 구할 수 있는 지 의심해봐야한다. 9.2. 해결과정 주어진 l, r 사이에서 8을 가장 적게 포함하는 횟수를 구하는 문제이다. 수의 범위가 20억이므로, 순차탐색으로 해결할 수 없다. 8의 최소 개수만 세면 된다는 것에 초점을 맞춰 풀어야한다. l과 r의 첫번째 자리수부터 비교하되 일치하면서 8이라면 개수를 카운트하고, 다르다면 stop한다. 만약 자리수의 값이 다르다면, (8이 아닌 다른값으로 설정해버리면 개수가 0이된다.) 바로 stop하는 이유는, 이미 앞 자리수가 다..

카테고리 없음 2021.09.15