캠프 4주차. 하루 더 쉬고 와서 그런가 오늘은 목표한 공부량을 많이 못 채웠다.
내일 모레부터 전처리 및 시각화 세션 시작이라 그 때까지는 파이썬과 ADsP 공부를 할 예정
학습 내용
조건 없이 테이블 조인하기(SQL)
JOIN 할 테이블을 쓰고, ON 절 조인 조건을 1=1 로 설정하면, 두 테이블이 그냥 붙는다.
문제 풀이 과정
SQL SELECT r.contest_id ,round(count(distinct r.user_id)/ttl_cnt*100,2) as percentage FROM Register as r LEFT JOIN ( SELECT count(distinct user_id) as ttl_cnt FROM Users ) as u on 1=1 GROUP BY r.contest_id ORDER BY percentage desc, r.contest_id asc
확률 계산하기(SQL)
avg(if(조건, 1, 0)) 를 계산하면 전체에 대해 특정 조건을 만족하는 값의 비율을 계산할 수 있다.
# 예를 들어, 전체 5명 중에서 여자가 2명 뿐이라면, (= if(여자, (참일 때=)1, (거짓일 때=)0)) # (여자, 여자, 남자, 남자, 남자) → if문으로 출력한 결과는 (1, 1, 0, 0, 0) 이 되고 # 이들의 평균을 계산하면 2/5 = 0.4 가 된다. # 즉, sum(if(특정 조건이 참일 때 1을 출력하도록 함)) / count(전체) 로 구할 수 있는, # 특정 조건 값이 전체에 대해 차지하는 비율 계산을 평균을 구하는 것으로 대신할 수 있다!
SQL # 첫 번째로 작성한 쿼리 -- quality : avg(rating / position) -- poor_query_percentage : (less than 3 rating) / ttl_cnt SELECT query_name ,round(avg(rating / position),2) as quality ,round(sum(if(rating < 3, 1, 0))/count(query_name)*100,2) as poor_query_percentage # 이 부분을 처음에는 집계함수를 두 번 써서 풀었는데, # 아래 주석처리한 쿼리로 풀이해도 같은 값을 얻을 수 있다. # ,round(avg(if(rating < 3, 1, 0))*100,2) as poor_query_percentage FROM Queries as a WHERE query_name is not NULL Group by query_name ;
제곱근으로 풀이한 코테(Python)
- 프로그래머스_약수의 개수와 덧셈
- 두 정수가 주어지고, 두 숫자들 사이의 모든 정수의 합을 구하는데, 그 중 약수의 개수가 홀수인 숫자만 빼주기.
- 약수의 개수가 홀수가 되는 경우는 n^2인 수, 즉 제곱근이 정수일 경우, 다시 말해 제곱근으로 나눴을 때 나머지가 0인 수
- 프로그래머스_정수제곱근 판별
- 주어진 정수 n이 어떤 수를 제곱한 숫자인지 판별
- n을 x로 나눴을 때의 값이 x와 일치할 경우 or n의 제곱근이 정수일 경우
2번 문제는 계속 안 풀렸던 건데 드디어 해결했다.
- if 문 다음에 else 문을 써서 반복문이 제대로 돌아가지 않았던 문제가 있었다. 코드블럭 범위 수정하여 해결했다.
둘 다 math 라이브러리 import 해서 풀이했다. 안 쓰고 푼 코드도 첨부
Python # 1번 문제 import math def solution(left, right): answer = 0 for i in range(left, right + 1): if i % math.sqrt(i) == 0: answer += -i else: answer += i return answer
Python # 2번 문제 - math 라이브러리 사용 import math def solution(n): for x in range(1, n+1): if x == math.sqrt(n): return (x + 1)**2 return -1
Python # 2번 문제 - 연산자로만 계산 def solution(n): for x in range(1, n+1): if n / x == x: return (x + 1) ** 2 return -1
- 프로그래머스_약수의 개수와 덧셈
고찰 & 기타
- 잘 풀리지 않았던 코드나 쿼리를 리뷰하면서 다시 풀 때 해결되면 그만큼 기분 좋은 일이 없다.
- 특히 알고리즘 문제를 풀 때 예전에 배웠던 수학 개념으로 풀면 그렇게 기분이 좋을 수가 없다. 수2 응시한 이과생이었던 보람이 있다.
- 함수나 개념에 익숙해지면 알고리즘 코딩테스트 같은 경우는 여러 문제가 한 번에 풀린다.
배운 내용을 완전히 내 것으로 만드는 과정이 얼마나 중요한 지 새삼 느꼈다.
'내일배움캠프_데이터분석_2기 > TIL' 카테고리의 다른 글
[TIL] camp_day18_240509 (0) | 2024.05.09 |
---|---|
[TIL] camp_day17_240508 (0) | 2024.05.08 |
[TIL] camp_day15_240503 (0) | 2024.05.03 |
[TIL] camp_day14_240502 (0) | 2024.05.02 |
[TIL] camp_day13_240501 (1) | 2024.05.01 |