✅ 오늘 한 것
알고리즘 문제, SQLD
✏️ 오늘 배운 점
푸드 파이트 대회
푸드 파이트 대회에서는 두 선수가 같은 양과 순서로 음식을 먹어야 한다.
주어진 음식 개수 배열 food를 바탕으로, 각 음식의 절반만 사용하여 왼쪽과 오른쪽이 대칭이 되도록 배치하고 중앙에는 물(‘0’)을 두는 문자열을 만들어야 한다.
food = [1, 3, 4, 6]
def solution(food):
result = ""
for i in range(1, len(food)):
for j in range(1, (food[i]//2)+1):
result += str(i)
result_list = list(result)
result_reverse_list = sorted(result_list, reverse=True)
return ''.join(result_list) + '0' + ''.join(result_reverse_list)
1️⃣ 반복문을 이용해 음식 배치 생성
food[i]는 i번 음식의 개수를 의미한다.
대회에서는 두 선수가 같은 양의 음식을 먹기 때문에, 각 음식의 절반(food[i] // 2)만 사용한다.
예를 들어 food[1] = 3이라면, 두 선수가 각각 1개씩 먹을 수 있으므로 "1"이 한 번 추가된다.
이 과정을 통해 왼쪽 선수의 음식 배치를 문자열로 만든다.
2️⃣ 대칭 구조를 위한 반대편 생성
문자열을 리스트로 바꾸어 sorted(result_list, reverse=True)를 통해 역순(내림차순)으로 정렬한다.
3️⃣ 최종 문자열 결합 (왼쪽 + 물 + 오른쪽)
왼쪽 음식(result_list) + 물("0") + 오른쪽 음식(result_reverse_list)을 이어붙인다.
SQLD
UNION: 두 SELECT 결과를 합집합(중복 제거)으로 결합
UNION ALL: 두 SELECT 결과를 그대로 합침 (중복 허용)
MINUS: 첫 번째 SELECT 결과에서 두 번째 SELECT 결과를 뺌
INTERSECT: 두 SELECT 결과의 교집합
ROLLUP: 그룹별 합계 + 중간 합계 + 전체 합계까지 한 번에 계산하는 기능
집계 함수:
- SUM() : 합계
- AVG() : 평균
- COUNT() : 개수
- MAX() : 최대값
- MIN() : 최소값
CUBE: ROLLUP보다 확장된 집계 방식
RANK(): 동점이 있으면 같은 순위, 다음 순위는 건너뜀(비연속 순위)
DENSE_RANK(): 동점이면 같은 순위, 다음 순위를 건너뛰지 않음(연속 순위)
ROW_NUMBER: 순위를 매기되, 중복 없이 무조건 1씩 증가
NTILE: 전체 데이터를 n개의 그룹(타일)로 나눠 각 행에 그룹 번호 부여
✏️ 오늘의 핵심
- 코딩 테스트: 반복문 + 문자열 조작으로 대칭 구조 구현
- SQLD: 집합 연산자(UNION~INTERSECT), 그룹 요약(ROLLUP/CUBE), 순위 함수(RANK~NTILE) 개념 숙지
📌추가로 해야할 점
SQLD 자격증 공부, 데이터 분석 심화 과정
'품질관리(QAQC) 데이터 부트캠프(본캠프)' 카테고리의 다른 글
| 본캠프_6주차(화)_TIL (0) | 2025.10.21 |
|---|---|
| 본캠프_6주차(월)_TIL (0) | 2025.10.20 |
| 본캠프_5주차(목)_TIL (0) | 2025.10.16 |
| 본캠프_5주차(수)_TIL (0) | 2025.10.15 |
| 본캠프_5주차(화)_TIL (0) | 2025.10.14 |