문제
테이블:Queue
+-------------+---------+
| 열 이름 | 유형 |
+-------------+---------+
| person_id | int |
| person_name | varchar |
| weight | int |
| turn | int |
+-------------+---------+
person_id 열에는 고유한 값이 들어 있습니다.
이 테이블에는 버스를 기다리는 모든 사람에 대한 정보가 있습니다.
person_id 및 turn 열에는 1에서 n까지의 모든 숫자가 포함되며 여기서 n은 테이블의 행 수
turn은 사람들이 버스에 탑승하는 순서를 결정합니다.
여기서 turn=1은 가장 먼저 탑승하는 사람을 나타내고
turn=n은 마지막으로 탑승하는 사람을 나타냅니다.
weight는 사람의 무게(kg)입니다.
버스 탑승을 기다리는 사람들이 줄을 서 있습니다.
하지만 버스의 무게 제한이 1000킬로그램 이라 탑승이 불가능한 분들이 계실 수도 있습니다.
무게 제한을 초과하지 않고 버스에 탑승할 수 있는 마지막 사람의 무게를 구하는 해를 작성하세요.
테스트 케이스는 첫 번째 사람이 무게 제한을 초과하지 않도록 생성됩니다.
한 번에 한 사람만 버스 에 탑승할 수 있다는 점을 유의하세요 .
작성 쿼리
SELECT
q1.person_name
FROM Queue q1 JOIN Queue q2 ON q1.turn >= q2.turn
GROUP BY q1.turn
HAVING SUM(q2.weight) <= 1000
ORDER BY SUM(q2.weight) DESC
LIMIT 1
* 찾아본 윈도우 함수 쿼리
WITH OrderedQueue AS (
SELECT
person_id,
person_name,
weight,
turn,
SUM(weight) OVER (ORDER BY turn) AS cumulative_weight
FROM Queue
)
SELECT weight
FROM OrderedQueue
WHERE cumulative_weight <= 1000
ORDER BY turn DESC
LIMIT 1;
sum over 를 통해 누적 합을 쉽게 계산가능. 만약 테이블이 커질 경우,
내가 작성한 쿼리는 한 행마다 비교하기 때문에 느려질 수 있다.
문제
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때,
전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수,
solution을 완성해주세요.
제한 조건
phone_number는 길이 4 이상, 20이하인 문자열입니다.
작성 코드
def solution(phone_number):
return '*' * (len(phone_number) - 4) + phone_number[-4:]
마케팅을 위한 머신러닝 회귀
회귀(Regression)란 무엇인가요?
참고 feature와 label이란?
자주 쓰이는 표현 정리
결국 회귀란?