[SQL 코드카타]
1. lead 혹은 row_number 함수 활용
180. Consecutive Numbers
https://leetcode.com/problems/consecutive-numbers
1) 어떤 문제가 있었나
동일한 열의 3번 이상 연속되는 숫자 구하기
2) 내가 시도해본 건 무엇인가
맨 첫 행 값이 바로 다음과 다다음 행의 칼럼과 값이 같아야 한다고 생각하고 lead 함수 적용
3) 어떻게 해결했나
① lead 함수를 2번 써서 2개의 열을 신규 생성
② lead 함수 사용 쿼리는 from절 서브쿼리로 넣고, where 절에 3개의 속성값이 동일해야 한다는 조건 적용
select num ConsecutiveNums
from (
select num,
lead(num) over(order by id) num1,
lead(num, 2) over(order by id) num2
from Logs) a
where num = num1 = num2;
4) 무엇을 새롭게 알았나
다른 사람 풀이에서 row_number 함수를 적용한 사례를 확인
select num ConsecutiveNums
from
(select id, num,
#id가 순차적으로 자동 생성되는 부분을 활용
#num으로 그룹핑한 뒤 row_number를 생성해 id에서 row_number 값을 빼기
id - row_number()over(partition by num order by num) as rw
from Logs ) a
group by num , rw #num 값이 1개만 나오지 않도록 rw도 함께 적용해야 함
having count(rw) >=3
① row_number 사용하여 num의 그룹 및 정렬에 따라 순서 부여 > id 값에서 뺀 rw 열 생성
② ①을 서브쿼리로 넣고, rw(id = row_number)의 개수가 3개 이상인 값을 having 절로 넣어서 정답 값 추출
[파이썬 코드카타]
1. 제곱근 구하기
정수 제곱근 판별
https://school.programmers.co.kr/learn/courses/30/lessons/12934
1) 어떤 문제가 있었나
제곱은 ** 로 구하는 것은 어렴풋이 알고 있었으나, 어떤 정수의 제곱근인지, 즉 루트(√)값을 구하는 방법을 모름
2) 내가 시도해본 건 무엇인가
약간의 구글링을 하며 2**2, 4**1/2, 4**0.5 등 여러 조합을 쳐보며, 제곱근을 구하는 법과 정수 조건을 거는 법을 찾아봄
3) 어떻게 해결했나
def solution(n):
x = n**0.5
if x >= 1 and x == int(x):
return (x+1)**2
else:
return -1
4) 무엇을 새롭게 알았나
- 121**1/2 로 넣으면 값이 자꾸 60.5로 나왔는데, 괄호를 넣거나(121**(1/2)) 실수로 넣어서(121**0.5) 해결 > 괄호가 중요함
2. join 함수
정수 내림차순으로 배치하기
https://school.programmers.co.kr/learn/courses/30/lessons/12933
1) 어떤 문제가 있었나
정수를 문자열로 바꾼 뒤 리스트에 하나씩 넣어서 정렬은 끝냈는데, 리스트에 숫자를 빼내는 방법을 모름
2) 내가 시도해본 건 무엇인가
구글링 및 다른 사람 풀이를 통해 join 함수가 있다는 것을 알게 되어 적용해봄
3) 어떻게 해결했나
def solution(n):
answer = []
n = str(n)
for i in n:
answer.append(i)
answer.sort(reverse=True)
answer = ''.join(answer) #홑따옴표 2개
return int(answer)
#다른 사람 풀이
def solution(n):
n = str(n)
n = sorted(n, reverse=True) #리스트를 만들어 for문으로 넣지 않아도 sorted로 문자열 정렬 가능
n = ''.join(n)
return int(n)
4) 무엇을 새롭게 알았나
- sort 와 sorted 정렬 함수의 활용을 더 공부하게 됨
└ sort : list.sort(reverse=True) 사용 시 리스트 안의 변수가 정렬됨. 리스트 > 리스트
└ sorted: a = sorted(n, reverse=True) 사용 시 각 문자열이 리스트 안의 개별 변수로 들어가면서 정렬 됨. 문자열 > 리스트
- join: 리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 반환하는 함수
└ ''.join(리스트): ['a', 'b', 'c'] 리스트를 'abc'의 문자열로 합쳐서 반환 * 홑따옴표 2개로 표기
└ '구분자'.join(리스트): 리스트의 값과 값 사이에 '구분자'를 넣어서 하나의 문자열로 합쳐서 반환. '_'.join(['a', 'b', 'c'])는 "a_b_c"
'TIL' 카테고리의 다른 글
[240123] SQL: 코드카타 111~112 & 파이썬: 코드카타 22 (1) | 2024.01.23 |
---|---|
[240122] SQL: 코드카타 110 & 파이썬: 코드카타 21 (0) | 2024.01.22 |
[240118] SQL: 코드카타 106~107 & 파이썬: 코드카타 18 (0) | 2024.01.18 |
[240117] 기초 프로젝트: 피드백 내용 정리 및 최종 아젠다 (0) | 2024.01.17 |
[240116] 기초 프로젝트: SQL을 활용한 코호트 분석 (0) | 2024.01.16 |