본문 바로가기

전체 글

(416)
[백준 2515번] 전시장 (C++) https://www.acmicpc.net/problem/2515 문제는 직관적으로 이해하기 어렵지 않았지만 어떻게 풀어야할지 감이 잘 안오는 문제다. 하지만 N = 30만이므로 완전탐색은 불가능하고 모든 그림을 배치하고 살펴보는 DFS, BFS 방식도 불가능하다고 판단했다. Greedy 탐욕법탐욕법은 어떨까? 그림의 가격순으로 정렬하고 가격이 높은 것부터 배치하고 다음 그림을 배치할 수 있다면 배치하는 방식을 사용하면 어떨까. 그리디를 사용하기 위해서는 두가지 조건을 만족해야한다.1. 탐욕 선택 조건: 앞에서 탐욕 선택한 값이 이후의 값에 영향을 주어선 안된다.2. 최적 부분 조건: 문제에 대한 최적해가 부분문제에 대해서도 역시 최적해이다. 이 문제에서 탐욕 선택 조건에서 문제가 있다. 만약 100의 ..
[프로그래머스 SQL] 주문량이 많은 아이스크림들 조회하기 (ORACLE) https://school.programmers.co.kr/learn/courses/30/lessons/133027 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 조인하고 그룹화한다음 주문량을 모두 더해 그것으로 정렬했다. 상위 세개만 가져오기 위해 FETCH FIRST 3 ROWS ONLY 를 사용했다. 아니면 서브쿼리화 한 수 ROWNUM 을 사용한다.SELECT fh.FLAVOR FROM FIRST_HALF fh, JULY j WHERE fh.FLAVOR = j.FLAVORGROUP BY fh.FLAVORORDER BY SUM(fh.TOTAL_ORDER + j.TOTAL_ORDER) ..
드라이빙 테이블, Merge 문이란? 드라이빙 테이블은 조인시 가장 먼저 읽히는 테이블을 뜻한다. ANSI JOIN의 경우는 순서 상관없이 옵티마이저가 자동으로 최적화해서 가장 좋은 전략을 짜준다. 하지만 오라클조인을 사용할 땐 순서가 중요해지는데 대학에서 배운대로 더 적은 테이블을 먼저 읽는 것이 성능에 좋다. 즉, 드라이빙 순서대로 테이블을 기술한다는 것은 "먼저 읽혀야 하는 테이블을 FROM 절에서 먼저 배치한다"는 의미이다. MERGE INTO 대상_테이블 TUSING (서브쿼리 또는 소스 테이블) SON (조인 조건)WHEN MATCHED THEN UPDATE SET 컬럼1 = 값1, 컬럼2 = 값2 ...WHEN NOT MATCHED THEN INSERT (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...
ANSI JOIN, ORACLE JOIN 차이점 단순하게 안시조인은 JOIN, ON 을 사용하는 것이고 오라클조인은 WHERE 절로 테이블을 엮는 것이다. 그래서 오라클조인을 사용하면 아우터조인을 할 수 없다는 것이다. 하지만! 할 수 있다. 이런식으로 + 기호를 적어주면 아우터조인처럼 나타낼 수 있다. +를 적지 않은 쪽이 메인테이블이 된다. 뭔가 오라클조인이 불편해보이지만 장점도 있다. 안시조인은 두 테이블에 반드시 값이 존재해야 한다. 하지만 오라클조인은 WHERE 절이기 때문에 원하는 값을 = 'VALUE' 이렇게 해주면 얻을 수 있다.  성능차이도 ANSI조인이 더 옵티마이저 전략, 대용량 데이터에서 유리하다. 출처: https://gent.tistory.com/469
[프로그래머스 SQL] 우유와 요거트가 담긴 장바구니 (ORACLE) https://school.programmers.co.kr/learn/courses/30/lessons/62284 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 하나의 테이블이지만 인라인뷰를 두개 만들어 조인하면 풀 수 있다.하지만 이것은 비효율적인 풀이이고 정해는 IN을 사용해야하는 것으로 생각된다. 1번 Join 풀이-- 코드를 입력하세요SELECT DISTINCT (y.CART_ID)FROM ( SELECT CART_ID, NAME FROM CART_PRODUCTS WHERE NAME = 'Yogurt') y, ( SELECT CART_ID, NAME FROM CART..
[프로그래머스 SQL] 년 월 성별 별 상품 구매 회원 수 구하기 ORACLE https://school.programmers.co.kr/learn/courses/30/lessons/131532?language=oracle 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 2025년 1월 남자는 N명,2025년 1월 여자는 M명 이런식으로 쿼리를 짜야하는 문제다. 먼저 필요한 정보를 추출한다. 조인으로 user_id 가 같은 것을 뽑자.그리고 년도, 월, 성별로 그룹화하고 user_id를 카운팅하면 되는 문제다. 하지만 주의해야할 점이 중복된 데이터이다. 왜냐하면 A라는 사람이 1월달에 두번 물건을 구매했을 수도 있기 때문이다. 그래서 중복을 제거하는 DISTINCT 함수를 함께 사..
MySQL / ORACLE 의 GROUP BY 동작 차이 원래 MySQL만 사용했는데 취업을 해보니 많은 회사들이 ORACLE을 사용하고 있다는 것을 알게되었다. 그리고 개발자는 프로그래밍보다 중요한 것이 SQL 작성 능력임도 알게되었다. 그래서 요즘 SQL 문제를 열심히 풀고 있는데 그룹화 문제에서 다음과 같은 에러를 만났다. GROUP BY 절 이후 컬럼  https://school.programmers.co.kr/learn/courses/30/lessons/144856 이 문제의 정답 쿼리로 예를 들겠다.SELECT a.author_id, a.AUTHOR_NAME, b.CATEGORY, sum(price * SALES) as TOTAL_SALESFROM BOOK b, AUTHOR a, BOOK_SALES bsWHERE ..
[프로그래머스 SQL] 저자 별 카테고리 별 매출액 집계하기 (ORACLE) https://school.programmers.co.kr/learn/courses/30/lessons/144856 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 3개의 테이블에서 원하는 정보를 가져와야하는 문제이다. SQL문제는 성능을 고려하지 않아도 되기 때문에 정말 많은 풀이가 존재한다. 1번 풀이SELECT author_id, author_name, category, sum(sales * price) as totalFROM ( SELECT book_id, book.author_id, author.author_name,..