반응형

Software Engineering 41

[Python 문제 풀이] 프로그래머스 "완전 범죄"

진짜 오랜만에 코딩테스트 풀어봤다. 이 문제는 누산해가는 전형적인 dp문제이다. 쉬울 줄 알았는데 감이 다 죽었는지, 어려워서 결국 딥시크한테 힌트 달라고 했다. 참고로 같은 문제를 ChatGPT는 풀지 못했다! 의사코드 1. info에 대해서 반복(2~4)2.     ckpt에 대해 반복3.         A와 B가 훔치는 두 경우의 수를 n_ckpt에 기록한다.4.     ckpt를 n_ckpt로 업데이트한다. 코드 def solution(info, n, m): ckpt = {0:0} for x, y in info: n_ckpt = {} for xx, yy in ckpt.items(): if xx + x yy: ..

[SQL 문제 풀이] 프로그래머스 "멸종위기 대장균 찾기"

WITH RECURSIVE CTE (GENERATION, ID) AS ( -- 초기조건 SELECT 1,ID FROM ECOLI_DATA WHERE PARENT_ID IS NULL UNION ALL -- 아래부터 반복 결과가 없으면 종료 SELECT GENERATION + 1, e.ID FROM ECOLI_DATA e -- 자식이 하나도 없는 마지막 세대일 경우 결과가 없음 JOIN CTE c ON e.PARENT_ID = c.ID ) SELECT COUNT(*) AS COUNT, GENERATION FROM CTE WHERE ID NOT IN ( SELECT PARENT_ID FROM ECOLI_DATA WH..

[SQL 문제 풀이] 프로그래머스 "물고기 종류 별 대어 찾기"

ROWNUMBER()를 활용한 전형적인 트릭Programmers SQL 문제 풀이 Lv3물고기 종류별 대어 찾기조건파악FACT와 DIMENSION으로 분류된 전형적인 테이블 구조이다. 타겟 속성이 NULLABLE이다.접근그룹별로 최대값을 가진 행만 SELECT한다. 그룹 안에서 랭킹을 부여하면 된다. 이를 위해서는 ROWNUMBER()를 사용한다. 정렬 후 순서대로 ROWNUMBER를 부여하면 자연스럽게 랭킹을 구현할 수 있다. 특별히 이 경우, 그룹 내에서의 랭킹을 부여하기 위해 OVER()와 PARTITION을 사용한다. DESC로 정렬할 때 NULL을 뒤로 보내기 위해 IS NULL ASC의 정렬 조건을 추가한다.쿼리분석WITH J AS ( SELECT ID, FIS..

[SQL 문제 풀이] 프로그래머스 "언어별 개발자 분류하기"

비트 논리 연산을 알면 풀고 모르면 못 풂 프로그래머스 Lv.4 '언어별 개발자 분류하기' SQL 코드 및 풀이 조건파악 SKILL_CODE가 400 (=b'110010000')이라면, 이는 SKILLCODES 테이블에서 CODE가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 에 해당하는 스킬을 가졌다는 것을 의미합니다. 접근비트 논리 연산자 &를 이용해 두 수를 비교할 경우 일치하는 비트가 존재할 경우 True가 나온다. 이를 이용해 JOIN하자.구현WITH J AS ( SELECT ID, EMAIL, CASE -- 조건에 맞게 SCORE를 기록 WHEN COUNT(CASE WHEN C..

[Python 문제 풀이] 프로그래머스 "[PCCP 기출문제] 2번 / 석유 시추"

공간적으로 생각해야 함 프로그래머스 Lv.2 '석유 시추' 파이썬 코드 및 풀이 조건파악1. 시추관이 지난 덩어리는 다 채굴됨2. 땅의 크기는 최대 500x500 -> 최소 연산 횟수 250,000이다.접근BFS로 각 덩어리의 크기를 구해야겠다. 그러고 나서 덩어리의 좌우 가장 끝에 있는 부분의 column 좌표를 기록하자. 이 범위에 시추관이 들어오면 그 때 덩어리의 크기를 더하면 된다. 면적이 크지 않아 중간에 이런 저런 연산이 추가되어도 넉넉하게 풀 수 있겠다.의사코드BFS로 각 덩어리의 크기를 구한다.BFS 로직 안에 덩어리의 좌우 양 끝의 column좌표를 기록하는 로직을 추가한다.덩어리 하나를 다 구하고 나면 땅의 column 수에 맞게 만들어 놓은 배열에다가 덩어리 좌우 좌표를 범위로 하는 ..

[Python 문제 풀이] 프로그래머스 "[PCCP 기출문제] 4번 / 수레 움직이기"

조건을 꼼꼼히 잘 따져야 하는 짜증나는 문제 프로그래머스 Lv.3 '수레 움직이기' 파이썬 코드 및 풀이 조건파악1. 미로의 크기는 최대 4x4이므로 시간복잡도는 신경쓰지 않아도 OK2. 도착 전까지는 무조건 움직임3. 도착한 수레는 고정4. 미로 밖을 넘지 않을 것5. 벽이 아닐 것6. 각 수레는 자신이 지나온 경로를 다시 갈 수 없음7. 수레가 겹쳐있을 수 없음8. 서로 자리를 바꾸지 않을 것접근BFS를 이용해 풀면 되는데 두 개가 동시에 움직인다.의사코드1. 초기 위치를 찾음2. 큐에 대해 반복현재 상태를 꺼냄도착한 수레를 특정, 모두 도착하면 그 즉시 종료 및 이동횟수를 반환도착하지 않은 수레에 대해 조건에 맞는 경우의 수를 지나온 경로, 이동 횟수와 함께 큐에 넣음큐가 비면 0을 반환 구현fro..

Airflow에서 TaskFlow API(@task)와 PythonOperator가 아닌 Operator 같이 사용하기

Introduction 기존의 DAGs에서 작성되는 고전적인 방식에 대비되는 TaskFlow API 패러다임은 Airflow 2.0에서 소개되었다. 데이터 파이프라인에서 파이썬 함수에 @task 데코레이터를 붙이는 것으로 간단하게 task를 생성할 수 있다. 함수의 이름이 task의 유일한 식별자 역할을 한다. 그런데 PythonOperator가 아닌 다른 Operator를 사용하면서 @task 데코레이터를 쓰려면 어떻게 해야할까? QuickStart 간단하게 context를 파이썬 함수의 파라미터로 받고 이걸 내부에 있는 다른 operator에 넘겨주면 된다! 아래는 예시이다. @dag() def dag(): @task() def python_task(**context): bash_task = Bash..

How to use TaskFlow API (@task) while using an Operator other than Python

Introduction TaskFlow API paradigm is introduced as part of Airflow 2.0 and contrasts this with DAGs written using the traditional paradigm. In this data pipeline, tasks are created based on Python functions simply using the @task decorator. The function name acts as a unique identifier for the task. But how do I use Python and other operators together? Let's check it out. QuickStart You just si..

PolarDB에서 OSS에 있는 csv파일 로드하기 (FOREIGN TABLE)

Introduction 이번 포스트에서는 PolarDB (for MySQL or PostreSQL)을 이용해 OSS (Object Storage Service)에 업로드한 CSV파일을 간단하게 읽는 방법에 대해서 설명한다. 이 방법을 통해 AWS의 Athena나 Redshift Spectrum처럼 PolarDB에서도 OSS에 있는 CSV형식의 파일에 다이렉트로 쿼리할 수 있다. Prerequisites 버전 확인 Alibaba cloud 공식 문서에 따르면 PolarDB for MySQL의 경우 아래 버전을 만족해야 한다. : A cluster of PolarDB for MySQL 8.0.1 whose revision version is 8.0.1.1.25.4 or later. A cluster of P..

Github Actions로 초간단 코드 배포하기 (SSH)

글 순서 이번 포스팅에서는 Github Actions를 이용해 아주 간단하게 코드를 원격 리눅스 서버에 배포하는 기능을 구성해보도록 하겠다. 코드 배포에는 Ubuntu를 기준으로 작성되었으며 SSH와 SCP를 이용한다. 이게 제일 간단하다. SCP를 이용하면 복사할 때 중복되는 파일을 덮어쓰기 됨에 유의하자.  Prerequisites- 서버의 public access 개방- 배포할 서버에 접속할 수 있는 key pair (pem파일)Quick Start Github Actions에 들어가서 main 브랜치에 대해 actions를 생성한다. 아래 내용을 작성하면 자동으로 아래 경로에 yml파일이 만들어 진다.  .github/workflows/main.ymlname: Code deployon: work..

반응형