전체 글 8

SQL 쿼리 성능 최적화와 정확성 검증

SQL은 데이터를 다루는 거의 모든 분야에서 사용되는 언어이다. 특히 데이터 분석, 백엔드 개발 등에서 SQL 쿼리의 성능과 정확성은 전체 시스템의 효율성에 직결된다. 이전에는 데이터 분석가도 쿼리 최적화에 대해 알아야하나? 라는 생각이 있었지만, 쿼리 한줄한줄이 DW, 레이크하우스에 치명적인 부하를 줄 수도 있으며 무엇보다도 실행 한 번에 비용이 부과되는 경우에는 많은 고민을 해야한다. 때문에, 앞으로 쿼리 효율성에 대해 차근차근 정리를 해보고자 한다. 1. WITH 문의 장단점WITH문이란?WITH문은 서브쿼리에 이름을 붙여 임시 테이블처럼 사용할 수 있게 해주는 SQL 구문이다. CTE를 표현하기 위해 사용한다. 복잡한 쿼리를 논리적 단계로 나누거나, 반복되는 서브쿼리를 재사용할 수 있도록 도와준..

Data analysis 2025.06.30

[2024~2025.06] 3번의 인턴 회고

2024년 1월부터 현재까지 총 3곳의 회사 전략팀에서 data analyst/전략 인턴을 했다. 긴 시간동안 공백기 없이 인턴 퇴사/입사를 하며 스스로 돌아보는 시간을 가지지 않았던 것 같아, 해당 과정에서 배우고 느낀 것을 기록해보려고 한다. 0. 배경 원래 교내 컴퓨터 동아리, it 창업 동아리에서 활동하며 백엔드/프론트 개발자로 프로젝트나 해커톤에 참여한 적도 꽤 있는 상황이었다. 그러나 근본적으로 궁금증이 생기고 지속적으로 생각했던 것은 해당 기능들을 활용해 어떻게 비즈니스 임팩트를 만들어내는지였다. 아무래도 전공과 다양한 활동들을 통해 습득한 기술들을 놓치고 싶지 않았기에 tech와 biz의 경계에서 일하고 싶다는 생각이 컸었던 것 같다. 1. 첫 인턴 합격그러던 중 관심있던 기업의 data..

회고 2025.06.29

[Gold V] Moo 게임 - 5904

분류 분할 정복, 재귀 문제 설명 Moo는 술자리에서 즐겁게 할 수 있는 게임이다. 이 게임은 Moo수열을 각 사람이 하나씩 순서대로 외치면 되는 게임이다. Moo 수열은 길이가 무한대이며, 다음과 같이 생겼다. m o o m o o o m o o m o o o o m o o m o o o m o o m o o o o o Moo 수열은 다음과 같은 방법으로 재귀적으로 만들 수 있다. 먼저, S(0)을 길이가 3인 수열 "m o o"이라고 하자. 1보다 크거나 같은 모든 k에 대해서, S(k)는 S(k-1)과 o가 k+2개인 수열 "m o ... o" 와 S(k-1)을 합쳐서 만들 수 있다. S(0) = "m o o" S(1) = "m o o m o o o m o o" S(2) = "m o o m o o ..

Algorithm 2023.06.04

[Gold I] 멀티탭 스케줄링 - 1700

분류 그리디 알고리즘 문제 설명 기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전기용품의 플러그를 뺐다 꽂았다 하는 불편함을 겪고 있다. 그래서 준규는 자신의 생활 패턴을 분석하여, 자기가 사용하고 있는 전기용품의 사용순서를 알아내었고, 이를 기반으로 플러그를 빼는 횟수를 최소화하는 방법을 고안하여 보다 쾌적한 생활환경을 만들려고 한다. 예를 들어 3 구(구멍이 세 개 달린) 멀티탭을 쓸 때, 전기용품의 사용 순서가 아래와 같이 주어진다면, 키보드 헤어드라이기 핸드폰 충전기 디지털 카메라 충전기 키보드 헤어드라이기 키보드, 헤어드라이기, 핸드폰 충전기의 플러그를 순서..

Algorithm 2023.06.04

[Silver II] 최대 힙 - 11279

분류 자료 구조, 우선순위 큐 문제 설명 널리 잘 알려진 자료구조 중 최대 힙이 있다. 최대 힙을 이용하여 다음과 같은 연산을 지원하는 프로그램을 작성하시오. 배열에 자연수 x를 넣는다. 배열에서 가장 큰 값을 출력하고, 그 값을 배열에서 제거한다. 프로그램은 처음에 비어있는 배열에서 시작하게 된다. 입력 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0이라면 배열에서 가장 큰 값을 출력하고 그 값을 배열에서 제거하는 경우이다. 입력되는 자연수는 231보다 작다. 출력 입력에서 0이 주어진 회수만큼 답을 출력한다. 만약 배열이 비어 있는 경..

Algorithm 2023.05.28

[Silver IV] 동전 0 - 11047

분류 그리디 알고리즘 문제 설명 준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다. 동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) 출력 첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다. import sys input = sys.stdin.readline N, K = map(int, input().split()) vals =..

Algorithm 2023.05.28

9020. 골드바흐의 추측

문제 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아니다. 골드바흐의 추측은 유명한 정수론의 미해결 문제로, 2보다 큰 모든 짝수는 두 소수의 합으로 나타낼 수 있다는 것이다. 이러한 수를 골드바흐 수라고 한다. 또, 짝수를 두 소수의 합으로 나타내는 표현을 그 수의 골드바흐 파티션이라고 한다. 예를 들면, 4 = 2 + 2, 6 = 3 + 3, 8 = 3 + 5, 10 = 5 + 5, 12 = 5 + 7, 14 = 3 + 11, 14 = 7 + 7이다. 10000보다 작거나 같은 모든 짝수 n에 대한 골드바흐 파티션은 존재한다. 2보다 큰 짝수..

Algorithm 2023.04.09