Nonamed Develog
[TIL] AI 웹 개발 7기 사전 캠프 4-4 본문
일일 알고리즘/SQL 코드카타
알고리즘25. 나누어 떨어지는 숫자 배열
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
제한사항
- arr은 자연수를 담은 배열입니다.
- 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
- divisor는 자연수입니다.
- array는 길이 1 이상인 배열입니다.
입출력 예
arr | divisor | return |
[5, 9, 7, 10] | 5 | [5, 10] |
[2, 36, 1, 3] | 1 | [1, 2, 3, 36] |
[3, 2, 5] | 10 | [-1] |
(추가)[2, 4, 6, 8, 9] | 3 | [6, 9] |
def solution(arr, divisor):
answer = []
for num in arr:
if num % divisor == 0:
answer.append(num)
answer.sort()
if len(answer) == 0:
answer.append(-1)
return answer
처음 코드를 짜봤다. answer가 비었을 때를 어떻게 표현할까 고민을 많이 했지만 길이로 결정하고 적어봤다. 테스트 케이스에서는 잘 작동했지만 답을 제출해보니 결과가 나오지 않았다. 테스트 케이스에 [2, 4, 6, 8, 9]을 추가하여 [6,9]가 나오게 설정을 한 후 돌려봤지만 결과는 [-1, 6, 9]가 나왔다. 아무래도 순서가 문제인가 싶어서 들여쓰기를 유심히 봤다.
def solution(arr, divisor):
answer = []
for num in arr:
if num % divisor == 0:
answer.append(num)
answer.sort()
if len(answer) == 0:
answer.append(-1)
return answer
answer가 비었을 것을 조건으로 넣으라면 answer와 같은 줄에서 조건문을 작성해야 했다.
SQL25. 고양이와 개는 몇마리 있을까
select animal_type,
count(1) as count
from animal_ins
group by animal_type
order by animal_type # 굳이 안써도 답과 결과가 같아서 안썼다가 틀림
# 문제에 고양이가 먼저라는 제한사항이 있어서 order by가 필요했음
SQL 연습문제1) 돈을 벌기 위해 일을 합시다!
sparta_employees
id
|
name
|
position
|
salary
|
hire_date
|
1
|
르탄이
|
개발자
|
30000
|
2022-05-01
|
2
|
배캠이
|
PM
|
40000
|
2021-09-25
|
3
|
구구이
|
파트장
|
35000
|
2023-06-01
|
4
|
이션이
|
팀장
|
50000
|
2021-07-09
|
# 1) 모든 직원의 이름(name)과 직급(position)을 선택하는 쿼리
select name,
position
from sparta_employees
# 2) 중복 없이 모든 직급(position)을 선택하는 쿼리
select distinct position
from sparta_employees
# 3) 연봉(salary)이 40000과 60000 사이인 직원들을 선택하는 쿼리
select id,
name,
position,
hire_date
from sparta_employees
where salary between 40000 and 60000
# 4) 입사일(hire_date)이 2023년 1월 1일 이전인 모든 직원들을 선택하는 쿼리
select id,
name,
position,
salary
from sparta_employees
where hire_date < '2023-01-01'
SQL 연습문제2) 이제 좀 벌었으니 flex 한 번 해볼까요?
products
id
|
product_name
|
price
|
category
|
1
|
맥북 프로
|
1200
|
컴퓨터
|
2
|
다이슨 청소기
|
300
|
생활가전
|
3
|
갤럭시탭
|
600
|
컴퓨터
|
4
|
드롱기 커피머신
|
200
|
주방가
|
# 5) 제품 이름(product_name)과 가격(price)만을 선택하는 쿼리
select product_name,
price
from products
# 6) 제품 이름에 '프로'가 포함된 모든 제품을 선택하는 쿼리
select product_name
from products
where product_name in ('프로')
#7) 제품 이름이 '갤'로 시작하는 모든 제품을 선택하는 쿼리
select product_name
from products
where product like '갤%'
# 8) 모든 제품을 구매하기 위해 필요한 돈을 계산하는 쿼리
select sum(price)
from products
SQL 연습문제3) 상품 주문이 들어왔으니 주문을 처리해봅시다!
orders
id customer_id product_id amount shipping_fee order_date
1 | 719 | 1 | 3 | 50000 | 2023-11-01 |
2 | 131 | 2 | 1 | 10000 | 2023-11-02 |
3 | 65 | 4 | 1 | 20000 | 2023-11-05 |
4 | 1008 | 3 | 2 | 25000 | 2023-11-05 |
5 | 356 | 1 | 1 | 15000 | 2023-11-09 |
# 9) 주문 수량(amount)이 2개 이상인 주문을 진행한 소비자의 ID(customer_id)만 선택하는 쿼리
select customer_id
from orders
where amount>=2
# 10) 2023년 11월 2일 이후에 주문된 주문 수량(amount)이 2개 이상인 주문을 선택하는 쿼리
select *
from orders
where order_date > '2023-11-02' and amount >= 2
# 11) 주문 수량이 3개 미만이면서 배송비(shipping_fee)가 15000원보다 비싼 주문을 선택하는 쿼리
select *
from orders
where amount < 3 and shipping_fee > 15000
# 12) 배송비가 높은 금액 순으로 정렬
select *
from orders
order by shipping_fee
SQL 연습문제4) 이제 놀만큼 놀았으니 다시 공부해봅시다!
sparta_students
id
|
name
|
track
|
grade
|
enrollment_year
|
1
|
르탄이
|
Node.js
|
A
|
2023
|
2
|
배캠이
|
Spring
|
B
|
2022
|
3
|
구구이
|
Unity
|
C
|
2021
|
4
|
이션이
|
Node.js
|
B
|
2022
|
# 13) 모든 학생의 이름(name)과 트랙(track)을 선택하는 쿼리
select name,
track
from sparta_students
# 14) Unity 트랙 소속이 아닌 학생들을 선택하는 쿼리
select *
from sparta_students
where track <> 'Unity'
# 15) 입학년도(enrollment_year)가 2021년인 학생과 2023년인 학생을 선택하는 쿼리
select *
from sparta_students
where enrollment_year between 2021 and 2023
# 16) Node.js 트랙 소속이고 학점이 ‘A’인 학생의 입학년도를 선택하는 쿼리
select *
from sparta_students
where track='Node.js' and grade='A'
SQL 연습문제5) 공부하다보니 팀 프로젝트 시간이 왔어요!
team_projects
id
|
name
|
start_date
|
end_date
|
aws_cost
|
1
|
일조
|
2023-01-01
|
2023-01-07
|
30000
|
2
|
꿈꾸는이조
|
2023-03-15
|
2023-03-22
|
50000
|
3
|
보람삼조
|
2023-11-20
|
2023-11-30
|
80000
|
4
|
사조참치
|
2022-07-01
|
2022-07-30
|
75000
|
# 17) AWS 예산(aws_cost)이 40000 이상 들어간 프로젝트들의 이름을 선택하는 쿼리
select name
from team_projects
where aws_cost >= 40000
# 18) 2022년에 시작된 프로젝트를 선택하는 쿼리(start_date < ‘2023-01-01’ 조건X)
select *
from team_projects
where date_format(date(start_date), '%Y') = '2022'#답: year(start_date)='2022'
# 19) 현재 진행중인 프로젝트를 선택하는 쿼리를 작성(지금 시점의 날짜를 하드코딩해서 쿼리X)
select *
from team_projects
where curdate() between start_day and end_day # curdate(): current_date()와 같음 현재시간을 나타냄
# 20) 각 프로젝트의 지속 기간을 일 수로 계산하는 쿼리
select *,
datediff(end_date, start_date) # datediff: datediff(a, b): a-b의 날짜 차이를 나타냄
from team_projects
# date 관련 SQL 함수 모음
# 년/월/일 추출 year(), month(), dayofmonth()
# 날짜 간 차이 datediff(a, b): a-b 차이 일 수를 나타냄
# 현재 날짜 curdate(), 현재 시간 curtime(), 현재 날짜&시간 curnow()
# 시간 더하기 date_add(a, interval b(second/minute/hour/day/month/year)): b만큼 a에서 더함
# 시간 빼기 date_sub(a, interval b(second/minute/hour/day/month/year)): b만큼 a에서 뺌
'WHAT I LEARN > TIL' 카테고리의 다른 글
[TIL] AI 웹 개발 7기 사전 캠프 5-1 (0) | 2024.06.17 |
---|---|
[TIL] AI 웹 개발 7기 사전 캠프 4-5 (1) | 2024.06.14 |
[TIL] AI 웹 개발 7기 사전 캠프 4-3 (0) | 2024.06.12 |
[TIL] AI 웹 개발 7기 사전 캠프 4-2 (1) | 2024.06.11 |
[TIL] AI 웹 개발 7기 사전 캠프 4-1 (1) | 2024.06.10 |