본문 바로가기

개발공부47

자료구조 - 큐 (원형큐) 앞서 이야기한 선형큐에는 많은 문제점이 있다. 1. 배열의 앞부분이 비어있더라도 사용할 수 없어 메모리 낭비가 심하다. 2. 큐의 크기가 제한적이다. 3. 데이터 이동 비용이 크다. 4. 큐가 포화상태일 경우 사용 불가하다. 때문에 동적으로 조정하여 해결해야한다. 이러한 선형큐의 문제점들을 쉽게 해결할 수 있는 것이 원형큐이다. 원형큐 연산 front 와 rear 의 초기값은 모두 0이다. front 는 큐의 첫 번째 요소의 하나 앞을, rear 은 마지막 요소를 가리킨다. front 와 rear 의 값이 (배열의크기 - 1) 의 위치에서 하나 증가할 땐 0이 된다. - 데이터 삽입 시 포화상태 검사 후 rear 증가, 증가된 위치에 새로운 데이터 삽입 - 데이터 삭제 시 공백 상태 검사 후 front .. 2023. 12. 1.
Q. 재구매율이 가장 높은 상품 조회 필요 데이터: 데이터 모두 instacart002.order_products__prior product_id ➜ 상품ID reordered ➜ 재구매 상품일 경우 1, 아닐 경우 0 으로 표시된 데이터 조회방법 1. 상품별 재구매율 조회 상품별로 재구매율을 구해주기 위해 우선 상품으로 그룹화를 해주어야 한다. group by 를 이용하여 product_id 를 그룹화 해준다. 재구매율이란 재구매 한 횟수 / 전체 구매 수 를 계산하면 된다. 이때, 재구매 한 횟수는 reordered 데이터를 합해주면 된다. 재구매의 상품일 경우 1로 표시되어 있기 때문이다. = sum(reordered) 전체 구매 수는 전체 행의 합을 구해주면 되기 때문에 count(*) 을 사용하면 된다. 따라서 sum(reorder.. 2023. 11. 30.
Q. 주문 건수가 많은 시간대 조회 필요 데이터 : 데이터 모두 instacart002.orders 주문번호 ➜ order_id 구매 시간 ➜ order_hour_of_day 조회방법 1. 시간대별 주문건수 조회 해석 시간대별로 묶어주기 위해 group by 를 사용하여 시간대로 그룹화해준다. 시간대별로 몇개의 주문건수가 있었는지 구하기 위해 count() 집계함수를 사용한다. 이때, 주문번호가 중복일 수 없기 때문에 distinct 를 이용하여 중복제거를 해준다. 2. 주문건수가 가장 많은 시간대 Top10 조회 이 때, 랭크함수를 사용하지 않고 조회해보기! 해석 (1) 번의 내용에서 주문건수 기준으로 순위를 구할 것이기 때문에 order by 를 이용하여 정렬해준다. 이때, 많은 것이 1등이어야 하기 때문에 내림차순 즉, desc 를 .. 2023. 11. 29.
Q. 장바구니에 가장 먼저 넣은 상품 조회 필요 데이터 : 데이터 모두 instacart002.order_products__prior 장바구니에 넣은 순서 ➜ add_to_cart_order 제품 ID ➜ product_id 조회방법 1. add_to_cart_order 데이터가 1이 아닌 것을 모두 0으로 분류 (컬럼명 1st) 해석 장바구니에 가장 먼저 넣은 상품을 조회할 것이기 때문에 가장 먼저 넣지 않은 데이터는 필요 없음 그렇기 때문에 case when 문을 이용하여 add_to_cart_order 데이터가 1이면 1, 아니면 0으로 변경 2. 상품별 장바구니에 가장 먼저 넣은 상품의 합계 조회 해석 (1) 번에서 구해준 1st 의 합게를 구해주면 된다. 모두 1로 변경해주었기 때문에 sum() 집계함수를 이용해서 구하면 된다. 또한 상.. 2023. 11. 28.
데이터베이스 instacart002 안에 있는 테이블 & 속성 instacart002 diagram table 속성 2023. 11. 28.
자료구조 - 큐 (선형큐) 큐란? 스택의 경우 데이터를 차곡차곡 쌓아 올리는 형태이지만, 큐는 데이터를 줄 세우는 형태로 먼저 들어온 데이터가 먼저 나가는 구조를 가지고 있습니다. 이러한 특성을 선입선출 (FIFO - First In First Out) 이라고 합니다. 새로운 데이터는 큐의 뒤에서 추가되고, 데이터를 삭제할 때에는 큐의 앞에서 삭제하는 구조입니다. 그렇기 때문에 큐에서의 삽입과 삭제는 다른쪽에서 일어나게 됩니다. 큐 연산 # 큐 생성 create(max_size) ::= 최대 크기가 max_size 인 공백큐를 생성한다. # 큐 초기화 init(q) ::= 큐를 초기화한다. # 큐 공백 검사 is_empty(q) ::= if(size == 0) return TRUE; else return FALSE; # 큐 포화상.. 2023. 11. 27.