Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

Nonamed Develog

[TIL] AI 웹 개발 7기 사전 캠프 4-4 본문

WHAT I LEARN/TIL

[TIL] AI 웹 개발 7기 사전 캠프 4-4

노네임드개발자 2024. 6. 13. 17:49

일일 알고리즘/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에서 뺌