본문 바로가기
DA/코드카타

0625 코드카타 - SQL(51~55), 파이썬(25~27)

by chysh 2025. 6. 23.

[SQL]

 

https://school.programmers.co.kr/learn/courses/30/lessons/59042

51. 없어진 기록 찾기

 

-- 코드를 입력하세요
SELECT o.animal_id, o.name
from animal_ins i right join animal_outs o on i.animal_id=o.animal_id
where i.animal_id is null
order by o.animal_id

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/133025

52. 과일로 만든 아이스크림 구하기

 

-- 코드를 입력하세요
SELECT f.flavor as FLAVOR
FROM first_half f join icecream_info i on f.flavor = i.flavor
WHERE i.ingredient_type = 'fruit_based' and f.total_order >=3000
ORDER BY f.total_order desc

 

*각 컬럼이 뭘 뜻하는지 충분히 숙지후에 코드 작성

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/131536

53. 재구매가 일어난 상품과 회원 리스트 구하기

 

-- 코드를 입력하세요
SELECT user_id, product_id
FROM online_sale 
group by user_id, product_id
having count(user_id)>=2
order by user_id, product_id desc

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/59415

54. 최댓값 구하기

 

-- 코드를 입력하세요
SELECT max(datetime)
FROM animal_ins

 

https://school.programmers.co.kr/learn/courses/30/lessons/164670

55. 조건에 맞는 사용자 정보 조회하기

 

-- 코드를 입력하세요
SELECT u.user_id, u.nickname, concat(u.city, u.street_address1, u.street_address2), concat(substr(str(TLNO), 1, 3),'-', substr(str(TLNO), 4, 7), '-', substr(str(TLNO), 8, 11))
FROM used_goods_board b inner join used_goods_user u on b.writer_id = u.user_id
GROUP BY u.user_id
HAVING count(u.user_id)>=3 
ORDER BY u.user_id desc

 

*CONCAT(u.city, ' ', u.street_address1, ' ', u.street_address2)  -> 공백 추가

*sql에서는 str() 지원하지 않음. 그냥 쓰면 된다.

*CONCAT(SUBSTRING(u.TLNO, 1, 3), '-', SUBSTRING(u.TLNO, 4, 4), '-', SUBSTRING(u.TLNO, 8, 4)) AS phone

-> substr(컬럼, 자리, 가져올 개수)

*GROUP BY를 쓸 거면 SELECT절의 모든 비집계 컬럼을 포함해야 함.

GROUP BY u.user_id, u.nickname, u.city, u.street_address1, u.street_address2, u.TLNO

*좀 더 효율적으로 생각하기. 3개이상 쓴 아이디만 가져옴-> 고객정보 테이블이랑 조인 시킴 -> 필요한거 출력함

 

--답

SELECT U.USER_ID,
       U.NICKNAME,
       CONCAT(U.CITY, ' ', U.STREET_ADDRESS1, ' ', U.STREET_ADDRESS2) 전체주소,
       CONCAT(SUBSTR(U.TLNO,1,3),'-', SUBSTR(U.TLNO,4,4), '-', SUBSTR(U.TLNO,8,4)) 전화번호
FROM USED_GOODS_USER U JOIN
(SELECT WRITER_ID
 FROM USED_GOODS_BOARD
 GROUP BY WRITER_ID
 HAVING COUNT(*)>=3
)B ON U.USER_ID = B.WRITER_ID
ORDER BY U.USER_ID DESC

 

 


[파이썬]

 

https://school.programmers.co.kr/learn/courses/30/lessons/12910

25. 나누어 떨어지는 숫자

 

--코드

def solution(arr, divisor):
    my_arr=[]
    for i in arr:
        if i % divisor == 0:
            my_arr.append(i) 
    if len(my_arr)==0:
        my_arr.append(-1)

    my_arr.sort()
    return my_arr

 

--다른 답

1)

def solution(arr, divisor): return sorted([n for n in arr if n%divisor == 0]) or [-1]

 

2)

def solution(arr, divisor):
    arr = [x for x in arr if x % divisor == 0];
    arr.sort();
    return arr if len(arr) != 0 else [-1];

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/76501

26. 음양 더하기

 

--코드

def solution(a, s):
    answer = []
    num=0
    for i in range(0, len(a)):
        if s[i] == True:
            num = a[i]
            answer.append(num)
        elif s[i] ==False:
            num = a[i]*(-1)
            answer.append(num)
    return sum(answer)

 

*if 절에 불리언 쓸거면 굳이 ==True이렇게 안써줘도 됨

 

--다른 답

1)

def solution(absolutes, signs):
    answer = 0
    for i in range(len(absolutes)):
        if signs[i]:
            answer += absolutes[i]
        else:
            answer -= absolutes[i]

    return answer

2) zip 함수

def solution(absolutes, signs):
    answer=0
    for absolute,sign in zip(absolutes,signs):
        if sign:
            answer+=absolute
        else:
            answer-=absolute
    return answer

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/12948

27. 핸드폰 번호 가리기

 

--코드

def solution(phone_number):
    ph=[]
    ph_real = phone_number[-4:]
    for i in range(0, len(phone_number)-4):
        ph.append('*')
    return(''.join(ph) + ph_real)

 

--다른 답

1) 

return "*"*(len(s)-4)+s[-4:]

*이렇게 간단하게 풀 수 있다니.. 문자열은 곱셈 가능함을 잊지 말기!