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-1 본문

WHAT I LEARN/TIL

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

노네임드개발자 2024. 6. 10. 18:05

일일 알고리즘/SQL 코드카타

 

Q. 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

def solution(n):
    num_list = []
    for i in str(n):
        num_list.append(i)
        num_list.sort(reverse=True)
        answer = int(''.join(num_list))
    return answer

n을 문자화하여 각 요소를 리스트에 넣은 다음 오름차순으로 정렬을 시켜봤다. 그 후에 리스트에 있는 문자화된 숫자들을 다시 합치는게 문제였다. 구글링 결과 join 함수를 이용하는게 적합해보여 실행시켜봤다.

join() 함수
문자형인 자료에 특정 구분자를 넣어 문자열로 반환한다.
A = [1, 2, 3, 4, 5] # int형 리스트
print("".join(A))
>>>>>>>> TypeError

A = ['1', '2', '3', '4', '5'] # str형 리스트
print("".join(A))
>>>>>>>> 12345

A = ['1', '2', '3', '4', '5'] # str형 리스트
print("+".join(A))
>>>>>>>> 1+2+3+4+5​

 

Q. 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

 

def solution(x):
    sum = 0
    for i in str(x):
        sum += int(i)
    if x % sum == 0:
        return True
    else:
        return False

이 전에 풀었던 자릿수의 합 풀이를 이용하여 풀어봤다. x를 문자화하여 요소별로 나누고 다시 숫자화하여 더하는 방식!

그리고 x에 sum(자릿수 합)을 나눴을 때 나머지가 0이면 하샤드 수가 되는 방식으로 코드를 짜봤다. 처음엔 결과값이 에러가 났고(이유는 True를 true라 적었기 때문),

def solution(x):
    sum = 0
    for i in str(x):
        sum += int(i)
        if x % sum == 0:
            return True
        else:
            return False

그 다음에 이렇게 코드를 작성하니 결과값이 모두 ture가 나왔다. 들여쓰기가 문제였던 것이다.

 

Q. 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

 

제한 조건

- a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.

- a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.

- a와 b의 대소관계는 정해져있지 않습니다.

def solution(a, b):
    answer = 0
    if a == b:
        answer = a or b
    elif a < b:
        for i in range(a,b+1):
            answer += i
    elif a > b:
        for i in range(b,a+1):
            answer += i
    return answer

처음엔 a=b일 때와 a≠b일 때 2가지 경우로 코드를 짰었다. 이 때 비교연산자 중 같지 않다는 의미를 가진 != 을 알게되었다.

하지만 a>b 경우에 배열을 할 수가 없어서 에러가 떴고 답과 같이 3가지 경우로 배열을 짠 후 더해주는 방법으로 풀었다.


SQL1. 이름이 있는 동물의 아이디

SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME is not NULL
ORDER BY 1

 

SQL2. 역순 정렬하기

select name,
       datetime
from animal_ins
order by animal_id desc

 

SQL3. 중복 제거하기

select count(distinct name)
from animal_ins

 

SQL4. 동물의 아이디와 이름

select animal_id,
       name
from animal_ins
order by 1

 

SQL5. 동물 수 구하기

select count(1)
from animal_ins

 

SQL6. 동명 동물 수 찾기

select name,
       count(name)
from animal_ins
where name is not null
group by name
having count(name)>1
order by name

having: group by 절에서 만들어진 그룹에 조건을 거는 것. (where 절은 모든 행에 조건을 거는 것)

 

SQL7. 아픈 동물 찾기

select animal_id, name
from animal_ins
where intake_condition='Sick'
order by 1

 

SQL8. 상위 n개 레코드

select name
from animal_ins
order by datetime
limit 1

limit a, b: a번 인덱스부터 b개의 행 반환

limit a offset b: b번 인덱스부터 a개의 행 반환

limit 1: 맨 위의 행 하나만 추가