[TIL] 241128 | python | zip | 약수 개수 홀짝 판별 | SQL | alias 범위 | rand()

·2024년 11월 28일

TIL

목록 보기
13/88
post-thumbnail
  1. SQL/알고리즘 코드카타
  2. SQL 세션 및 복습

알고리즘 코드카타

zip()

  • zip(iterable)
  • iretable한 각 요소를 같은 인덱스끼리 잘라서 리스트로 반환
num = [1, 2, 3, 4]
eng = ['one', 'two', 'three', 'four']
for x, y in zip(num, eng):
    print(x, y)
    
# 결과
1 one
2 two
3 three
4 four

zip()을 이중으로 사용하기

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
알고리즘 코드카타 37번

def solution(arr1, arr2):
    answer = [[c + d for c, d in zip(a,b)] for a, b in zip(arr1,arr2)]
    return answer

arr1 = [[1,2], [2,3]]
arr2 = [[3,4],[5,6]]

print(solution(arr1, arr2))
결과: [[4, 6], [7, 9]]
  • zip 없이 짠 코드
def solution(arr1, arr2):
    answer = []
    for i in range(len(arr1)):
        answer.append([])
        for j in range(len(arr1[i])):
            answer[i].append(arr1[i][j] + arr2[i][j])
    return answer

어떤 정수의 약수의 개수가 홀수인지 짝수인지 판별하기

  • 어떤 정수 N이 정수의 제곱근을 가진다면, 그 정수 N의 약수의 개수는 홀수이다.
    • ex. 25는 5라는 정수 제곱근을 가짐. 25의 약수는 [1, 5, 25] 3개 -> 홀수
  • 어떤 정수 N이 정수의 제곱근을 가지지 않는다면, 그 정수 N의 약수의 개수는 짝수이다.
    • ex. 10은 정수의 제곱근을 가지지 않음. 10의 약수는 [1, 2, 5, 10] 4개 -> 짝수

이를 이용한 문제 풀기

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
알고리즘 코드카타 33번

def solution(left, right):
    answer = 0
    for i in range(left,right+1):
        if int(i**0.5)==i**0.5:
            answer -= i
        else:
            answer += i
    return answer
  • 위 특징을 이용해 for문을 하나만 사용하여 문제 풀이 가능

SQL 세션 복습

COUNT(*), COUNT(칼럼명)

  • COUNT(*): count 값이 있어도 count
  • COUNT(칼럼명): 해당 칼럼 안의 null값은 제외하고 count

alias 사용 범위

  • 쿼리 실행 순서:
    • FROM → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT
  • SELECT가 HAVING보다 나중에 실행되게 때문에 SELECT에 지정한 alias를 HAVING에 적용하는 것은 불가능.
  • 다만, MySQL에서는 예외적으로 GROUP BY, HAVING, ORDER BY 모두에 사용 가능
    - WHERE 절에는 사용 불가

rand()

  • 0 이상 1 미만의 난수를 반환한다.
  • ORDER BY, LIMIT과 함께 사용하여 랜덤 샘플링 가능.
SELECT *
FROM TABLE_NAME
ORDER BY RAND()
LIMIT 5
  • 랜덤한 5개의 표본 추출
profile
To Dare is To Do

0개의 댓글