코딩 테스트 132

약수의 개수와 덧셈

[문제] 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.  [풀이]이 문제는 어떤 정수의 약수의 개수가 홀수인지 짝수인지 판별하는 방법만 알면 효율적으로 풀 수 있다.약수는 쌍으로 존재하는데, 제곱수의 경우 그 쌍이 자기 자신이다. 즉, 제곱수의 약수의 개수는 홀수개이다.이를 이용해 문제를 풀어보자 def solution(left, right): return sum(-n if (n**0.5).is_integer() else n for n in range(left, right+1))

음양 더하기

[문제] 어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요. absolutes = [4, 7, 12]signs = [true, false, true] [풀이]이 문제는 zip함수와 리스트컴프리헨션에서 if문을 어떻게 사용하는지를 알아봅시다zip(absolutes, signs)를 하게 되면 각 인덱스별로 요소들을 튜플로 묶어줍니다(4, true), (7, false), (12, true) 이를 for문으로 가져와서 num과 sign 변수에 한번에 할당한다. 이를 언패킹이라고 한다그리고 리스트 컴프리헨션에..

두 정수 사이의 합

[문제] 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 이 문제는 이렇게 풀 수 있다. 예를 들어7, 8, 9, 10, 11, 12, 13 이 있다면13, 12, 11, 10, 9, 8, 7 처럼 뒤집어서-------------------------------20, 20, 20, 20, 20, 20, 20 더해준다. 그러면 처음과 마지막을 더한 값이 수 갯수만큼 나오는걸 알 수 있다. 다 더해서 2로 나누면 7과 13 사이에 속한 모든 정수의 합을 구할 수 있다. O(1)로 풀 수 있는 문제다.def solution(a, b): ..

약수의 합

[문제] 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.  [풀이]약수는 쌍(pair)으로 존재한다는 점을 알면 더욱 빠르게 해결할 수 있다. 12 = 1 x 12 → (1, 12)12 = 2 x 6 → (2, 6)12 = 3 x 4 → (3, 4) 1. 1 부터 n**0.5 까지 순회를 돌면서 i 와 n // i 두값을 모두 약수 처리해 더해준다.2. n이 제곱수라면 루트값이 중복되므로 한번만 처리할 수 있게 한다 def solution(n): answer = 0 for i in range(1, int(n**0.5) + 1): if n % i == 0: answer += i if i !..

파이썬의 데이터형과 자료구조

자료구조의 종류1. 단순 자료구조정수실수문자문자열2. 선형 자료구조 - 데이터를 한 줄로 순차적으로 표현한 형태리스트스택큐3. 비선형 자료구조 - 하나의 데이터 뒤에 여러 개가 이어지는 형태트리그래프4. 파일 자료구조 - 파일 내용이 디스크에 저장되는 방식으로 구분순차 파일색인 파일직접 파일 파이썬 데이터 형식기본 데이터 형식리터럴 : 숫자, 문자열 등 상수 값을 직접 표기한 데이터. 예: 100, 1.23, 'python' 등의 값불 : 참, 거짓을 저장숫자형정수(int) : 크기 제한 x실수(float) : 소수점 아래 16자리까지 정밀도 보장연속형 데이터 형식가변형배열(리스트) 딕셔너리세트불변형문자열튜플

이빠진 데이터를 채워넣어보자 (재귀 테이블, 윈도우 함수)

문제는 - 월별(년-월) 주문 건수를 계산하되, 주문이 없는 달도 0건으로 포함하고- 지난달 대비 주문 건수 증감율도 계산해야 하는 문제다 우선 주문 시간을 월별로 GROUP BY 한 뒤 주문건수를 구해보자. 16년 10월, 11월 데이터가 빠져있는 것을 확인할 수 있다.빠진 월을 포함할 수 있도록 재귀 테이블을 만들어준다. 먼저 재귀테이블의 구조를 알아보자 이 구조에서 날짜값을 하나씩 더해갈 건데 초기값 2016-10 부터 한달씩 더해야 한다.이때 DATE_ADD 함수가 쓰이는데 이 함수에 대해서도 알아 둘 필요가 있다. 이제 테이블을 만들어보자. DATE_ADD의 데이터로는 완전한 날짜 형식 (예: '2022-10-01') 이 들어가야 한다 테이블이 만들어졌으니 먼저 확인한 테이블과 현재 테이블 기준..

상품을 구매한 회원 비율 구하기

[문제] USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요. [단계별 풀이] 1. 두 테이블을 USER_ID로 JOIN 해준다. (SUB쿼리로 USER_ID를 필터링할 수도 있지만 성능상 좋지 않다)2. 필터링은 LIKE 연산자로 해주는 것이 YEAR(JOINED) = 2021 보다 더 효율적이다. (문자열 단순 비..

자동차 대여 기록 별 대여 금액 구하기

[문제] CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요. [단계별 풀이] 1. HISTORY 테이블과 CAR 테이블을 CAR_ID로 JOIN 하되 CAR_TYPE이 트럭인 행들만 필터링해서 JOIN 한다2. DATE_DIFF를 사용하여 대여 기간을 구하고 기간별 할인율을..

특정 기간동안 대여 가능한 자동차들의 대여비용 구하기

[문제] CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬, 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정렬해주세요. CAR_RENTAL_COMPANY_..

입양 시각 구하기2

[문제] 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다. [단계별 풀이] 해당 문제는 이빠진 데이터를 채워야하는 문제로 재귀저문제]보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.  [단계별 풀이]해당 문제는 이빠진 데이터를 채워야하는 문제로 재귀테이블을 사용해야한다구조를 알아보자WITH RECURSIVE 테이블명 (컬럼명) AS ( SELECT 초기값 UNION AL..