목록프로그래머스 (8)
Seung's Learning Record
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ex5DSM/btsGazn8f7u/DZNEcrpNLW8mEp0jqdknr0/img.png)
사용한 풀이법 : heap 풀이 과정 최소값과 그 다음값을 탐색, 계산 후 다시 삽입 => 해당 연산이 조건을 충족할 때 까지 반복되어야 함. 이를 위한 자료구조가 바로 최소힙! 1. heapify 메서드를 통해 scoville 리스트를 최소힙으로 초기화 2. 항상 최소값을 뽑아내는 heappop 연산을 통해 min1, min2를 설정 이때, min1이 k이상이거나, 더 이상 뽑아낼 원소가 없을때는 반복문 종료 3. 삽입할 원소를 계산 후, 힙에 push 4. 연산이 완료 될 때마다 +1한 answer를 리턴 풀이 코드 import heapq def solution(scoville, K): answer = 0 heapq.heapify(scoville) while True: min1 = heapq.heap..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/vMUtS/btsFegaLKqC/UvagvxGHknpenOyMtDkqM1/img.png)
소요시간 : 19분 사용한 풀이법 : SET, 서브쿼리, GROUP BY 풀이 과정 1. 0-23시까지 모든 시간을 표시하기 위한 @hour 변수 선언 2. -1로 초기값을 준 뒤, +1을 해가며 hour이 23이 될 때 까지 진행 3. 서브쿼리에선 datetime의 시각이 hour와 동일한 경우에 그룹화 하여 카운트를 진행 작성 코드 set @hour := -1; select (@hour := @hour+1) as HOUR, ifnull((select count(animal_id) from animal_outs where hour(datetime) = @hour group by hour),0) as COUNT from animal_outs where @hour < 23 order by 1 작성 코드 처..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/1bXpI/btsE92khQld/cHUfoQY0tyvTf0JOgWuWb1/img.png)
SELECT A.REST_ID, A.REST_NAME, A.FOOD_TYPE, A.FAVORITES, A.ADDRESS, ROUND(AVG(B.REVIEW_SCORE),2) AS SCORE FROM REST_INFO A JOIN REST_REVIEW B ON A.REST_ID = B.REST_ID WHERE A.ADDRESS LIKE "서울%" GROUP BY B.REST_ID ORDER BY SCORE DESC, A.FAVORITES DESC 소요시간 : 14분 사용한 풀이법 : JOIN, GROUP BY 풀이 과정 1. 두 테이블을 REST_ID를 통해 JOIN 2. 식당 주소가 서울로 시작하는 곳을 조건으로 거르기 3. 같은 식당끼리 그룹화 4. 해당 식당의 점수들을 평균내기 5. ROUND()함수..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rv84j/btsFcPYb86p/EiRnGEjHhv82koUdEPGkNK/img.png)
소요시간 : 13분 사용한 풀이법 : INNER JOIN 풀이 과정 1. 주문 정보 테이블에 주 성분 테이블을 Inner join 2. 각각의 테이블에서 문제가 요구한 조건은 WHERE 절을 통해 충족 작성 코드 SELECT FIRST_HALF.FLAVOR FROM FIRST_HALF JOIN ICECREAM_INFO ON FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVOR WHERE FIRST_HALF.TOTAL_ORDER > 3000 AND ICECREAM_INFO.INGREDIENT_TYPE LIKE 'fruit%'; 피드백 JOIN을 쓰면 되는걸 알면서도 SELECT 섹션에 있는 문제니까 join 안써도 되겠지!하고 오기부리다가 결국 JOIN 썼다. 오기는 똑똑한 사람만 부려..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cnUaDl/btsE94vvUKD/quxyepDchZ2qZ4D5qCH64k/img.png)
소요시간 : 9분 문제 유형 : SELECT, UNION ALL 풀이 과정 1. 각각의 테이블에서 원하는 데이터를 선택 2. UNION ALL 을 통해 중복을 유지하면서 통합 3. 기준에 맞게끔 정렬 작성 코드 SELECT DATE_FORMAT(SALES_DATE,"%Y-%m-%d") AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT FROM ONLINE_SALE WHERE SALES_DATE LIKE '2022-03-__' UNION ALL SELECT DATE_FORMAT(SALES_DATE,"%Y-%m-%d") AS SALES_DATE, PRODUCT_ID, NULL, SALES_AMOUNT FROM OFFLINE_SALE WHERE SALES_DATE LIKE..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bZ2GWf/btsFb6seA5h/KHiU5fy2goSpqB7hBYqD3K/img.png)
소요시간 : 7분 문제 유형 : SELECT 풀이 과정 1. WHERE 조건을 통해서 3월생 찾기 1.1 SQL 날짜 함수 이용 1.2 LIKE 이용 작성 코드 SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH,"%Y-%m-%d") AS DATE_OF_BIRTH FROM MEMBER_PROFILE WHERE GENDER = 'W'AND TLNO IS NOT NULL AND # MONTH(DATE_OF_BIRTH)= 3//날짜 함수를 이용하는 방법 # DATE_OF_BIRTH LIKE '%-03-%'//LIKE의 % 이용하는 방법 DATE_OF_BIRTH LIKE'____-03-__'//LIKE의 _ 이용하는 방법 ORDER BY MEMBE..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/DNw4I/btsE6BHgKxy/s39XBKAvbGoVSVj3ddUg20/img.png)
소요시간 : 8분 문제 유형 : SELECT, GROUP BY 풀이 과정 1. USER_ID와 PRODUCT_ID로 그룹화 2. 동일한 요소들끼리 묶이게 됨 3. HAVING을 통해 USER_ID든 PRODUCT_ID든 그 수가 2 이상인 것들을 탐색 작성 코드 SELECT USER_ID,PRODUCT_ID FROM ONLINE_SALE GROUP BY USER_ID,PRODUCT_ID HAVING COUNT(PRODUCT_ID)>1 ORDER BY USER_ID ASC, PRODUCT_ID DESC; 피드백 GROUP BY의 실행이 정확히 어떤 식으로 이루어지는지 잘 몰라서 집계함수를 써야되는 것을 알고있음에도 불구하고 좀 헤맸음. 다른것들은 몰라도 중요한 구문들은 확실이 이해하고 암기해야함을 또 다시..