TIL

2024-05-31

여연찌 2024. 5. 31. 21:25
  • Today

1. SQL 코드카타(98번)

2. 알고리즘 코드카타(43번)

3. SQL Challenge 1회차 수강

 


  • Today I Learned

 

SQL

 

WITH cte_login AS(
  SELECT player_id
       , DATEDIFF(event_date, MIN(event_date) OVER(PARTITION BY player_id)) = 1 as login
  FROM activity
)
SELECT ROUND(SUM(login) / COUNT(DISTINCT player_id), 2) as fraction
FROM cte_login

 

DATEDIFF(event_date, MIN(event_date) OVER(PARTITION BY player_id))=1

event_date 와 player_id의 처음 로그인한 날짜 사이의 일수 계산이 1일 때 라는 조건이 True 면 1, False 면 0으로 표기된다.

 

* MIN(event_date) OVER(PARTITION BY player_id)

player_id 별로 최초 로그인 한 날짜구하기

 

* event_date 와 player_id의 처음 로그인한 날짜 사이의 일수 계산이 1일 때

= 연속으로 로그인 했을 때

 

* SQL 에서 True 면 1, False 면 0

 

그럼 이와 같은 형태로 반환된다.

 

 

 

 

 

 

이렇게 나온 테이블로

SUM(login) 

로 연속으로 로그인한 player_id 의 숫자를 세어주고

 

이렇게 나온 결과를 문제에서 요구한데로

2일 연속으로 로그인한 사용자 수 / 전체 사용자 수 를 구해준다.

 

 

 

 


SQL Challenge 1회차

 

RANK()

DENSE_RANK()

ROW_NOMBER()

 

 

LAG() 앞에 있는 값을 가져오는 것

LAG(컬럼,2) 두번째 앞에 있는 값을 가져오는 것

LEAD() 뒤에 있는 값을 가져오는 것

 

 

 

 

 


Python

 

https://lyj-01.tistory.com/168

 

크기가 작은 부분문자열

숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 r

lyj-01.tistory.com

def solution(t, p):
    answer = 0
    n = len(p)
    for i in range(len(t)-n+1):
        parts = t[i:i+n]
        if parts <= p:
            answer += 1
    return answer

t: "10203"

p: "15"

 

① 

n = len(p)

# p 의 길이를 담을 n 생성

 

>> n: 2

for i in range(len(t)-n+1):

# t 의 길이 - p의 길이 + 1

 

>>  5-2+1

>> 0~3 까지 반복

 

parts = t[i:i+n]

t 의 부분문자열을 parts 로 추출

 

>> 10203[0:2]

>> 102

>> 10203[1:3]

>> 020

>> ...

>> parts: 102,020,203

 

if parts <= p:
            answer += 1

 

# parts 가 p 보다 작거나 같으면 answer 에 1 더하기

 

>> answer: 3

 

 

 


  • Next

1. SQL Challenge 1회차 듣기

2. 통계학 1회차 수강

3. 코드카타문제

'TIL' 카테고리의 다른 글

2024-06-03  (1) 2024.06.03
2024-06-02  (0) 2024.06.02
2024-05-30  (0) 2024.05.30
2024-05-29  (0) 2024.05.29
2024-05-28  (0) 2024.05.28