Nonamed Develog
[TIL] AI 웹 개발 7기 사전 캠프 4-1 본문
일일 알고리즘/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: 맨 위의 행 하나만 추가
'WHAT I LEARN > TIL' 카테고리의 다른 글
[TIL] AI 웹 개발 7기 사전 캠프 4-3 (0) | 2024.06.12 |
---|---|
[TIL] AI 웹 개발 7기 사전 캠프 4-2 (1) | 2024.06.11 |
[TIL] AI 웹 개발 7기 사전 캠프 3-5 (0) | 2024.06.05 |
[TIL] AI 웹 개발 7기 사전 캠프 3-3 (2) | 2024.06.05 |
[TIL] AI 웹 개발 7기 사전 캠프 3-2 (1) | 2024.06.04 |