- 오늘 진행한 일
1. SQL 코드카타(61~65)
2. 알고리즘 코드카타(24~25)
- 기억할 내용
SQL
특정 위치 음식점의 평균 점수를 구하는 문제에서
음식점 이름과 음식타입에 랜덤한 값이 들어가는 것인가 해서 서브쿼리에~ 그룹바이 추가에
온 갖 쿼리를 짰는데 그냥 음식점별로 평균만 내주면 되는 문제였다..
아직 GROUP BY 에 대한 개념이 제대로 잡히지 않았는지 다시 살펴봐야겠다
자동차 평균 대여 기간 구하기
평균 대여 기간을 구하면서
SELECT car_id
, ROUND(AVG(DATEDIFF(end_date,start_date)+1),1) AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE avg((DATEDIFF(end_date,start_date)+1))>=7
GROUP BY 1
ORDER BY 2 DESC, 1 DESC
이렇게 했더니 오류가 떴다!
WHERE 절에서는 집계함수 avg 를 사용할 수 없다
SELECT car_id
, ROUND(AVG(DATEDIFF(end_date,start_date)+1),1) AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY 1
HAVING AVERAGE_DURATION>=7
ORDER BY 2 DESC, 1 DESC
HAVING 에서 사용해주어야 한다! 꼭 기억할 것
헤비 유저가 소유한 장소
having 을 사용하여 뽑는 것 까지는 진행했으나
서브쿼리가 익숙하지 않아 어느곳에 넣어야 하는지 여러번 헤맸다
이 문제 같은 경우에는 먼저 나온 결과를 기반으로 메인쿼리에서 출력해주기 때문에
where 절에서 서브쿼리를 사용했다!
서브쿼리를 어떤 구문에서 사용할지 공부해보아야겠다.
파이썬
풀리지 않아서 괴로웠던 궁금증이 드디어 해결 되었다!
빈 리스트를 생성할 때 [] 와 list() 가 어떤 차이가 있는지
매니저님 답변과 구글링을 통해 정리한 내용을 첨부하겠다
서울에서 김서방 찾기
인덱스 찾는 함수를 구글링해서 찾아본 후에 코드를 짜보았다
def solution(seoul):
a = seoul.index("Kim")
b = "김서방은"
c = "에 있다"
return str(b)+' '+str(a)+str(c)
원하는 결괏값이 나오기 위해 수정에 수정을 했을 때 통과 되었는데
다른 풀이를 찾아보니 한줄로도 충분히 줄일 수 있더라!
return "김서방은 "+str(seoul.index("Kim"))+"에 있다"
문자열을 합쳐주는 + 는 문자열 만 가능하기 때문에 인덱스를 찾아 str로 변경을 해주어야 한다
첫번째 짰던 코드에서도 b 와 c는 str 을 안해주어도 됐음..
format 함수로도 사용해 볼 수 있었는데 다음기회에는 한번 적용해서 코드를 짜보고 싶다
나누어 떨어지는 숫자 배열
def solution(arr, divisor):
answer = [] # 빈 리스트 생성
for array in arr: # 자연수 배열인 arr을 하나씩 넣어 반복
if array % divisor==0: # divisor 로 나누어 떨어지면
return answer.append(array) # answer에 그 값을 추가 해서 반환해라
else: # 그 외의 경우에는
return answer.append(-1) # answer에 -1 을 추가해 해서 반환해라
결괏값은 null 이 나왔다
* 찾아보니 append 함수는 값을 반환해 주는 것이 아니라 리스트에 더해주기만 한다고 한다
return 값이 없기 때문에 NULL 로 나오는 것!
answer 값에 추가가 안되나 해서 이 뒤에 하나씩 추가를 해주었는데
def solution(arr, divisor):
answer = []
for array in arr:
if array % divisor==0:
answer.append(array)
else:
answer.append(-1)
return answer
이번에는 나누어 떨어지는 값 에 -1 이 섞여져서 나왔다.
구글링을 하다가 조건을 하나 놓친것을 발견!
'나누어 떨어지는 수가 하나도 없을때' 라는 조건을 넣어주었다.
def solution(arr, divisor):
answer = []
for array in arr:
if array % divisor==0:
answer.append(array)
elif len(answer)==0: # answer(나누어떨어지는수) 가 하나도 없을 때
answer.append(-1)
answer.sort()
return answer
결과는 같았지만 테스트 1~4, 9~12,14~16 에서 실패..
실패이유를 예상해보자면
조건의 순서가 잘못 되었다.
그리고 -1을 넣어줘야 하는 경우에는
나누어 떨어지는 수가 하나도 없을 때이기 때문에 반복문에 넣는 것이 아니었던 것 같다!
오름차순으로 정렬을 먼저 해주고
그 뒤에 반복문 밖에서 하나도 없는 경우를 배열로 만들어주었다
def solution(arr, divisor):
answer = []
for array in arr:
if array % divisor==0:
answer.append(array)
answer.sort()
if len(answer)==0:
answer.append(-1)
return answer
드디어 완성!
def solution(arr, divisor):
answer = []
for array in arr:
if array % divisor==0:
answer.append(array)
if len(answer)==0:
answer.append(-1)
answer.sort()
return answer
* 이렇게 정렬순서를 아래로 넣어봤는데도 테스트가 통과되었던 것으로 보아
2번째 조건인 나누어떨어지는 수가 하나도 없을때 라는 조건이 반복문 밖에서 해줬어야 했기 때문인 듯 하다
- 내일 진행 예정
1. SQL 코드카타 복습
2. 알고리즘 코드카타 복습
'TIL' 카테고리의 다른 글
2024-04-08 (0) | 2024.04.08 |
---|---|
2024-04-05 (0) | 2024.04.05 |
2024-04-03 (0) | 2024.04.03 |
2024-04-02 (0) | 2024.04.02 |
2024-04-01 (0) | 2024.04.01 |