전체 글
![[Programmers] no59045: 보호소에서 중성화한 동물](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbzXtIO%2Fbtr6qPy7kW2%2FAAAAAAAAAAAAAAAAAAAAAHc9ST7TzI-GA5iIAlFXnTmurvhbHqrxXS8TcSCykmPO%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D4MaZrIxHXMlRWKvpAWYCAWSnI9k%253D)
[Programmers] no59045: 보호소에서 중성화한 동물
문제 -- 보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다. -- 보호소에 들어올 당시에는 중성화되지 않았지만, -> ANIMAL_INS -> SEX_UPON_INTAKE (Intact Male, Intact Female) -- 보호소를 나갈 당시에는 중성화된 -> ANIMAL_OUTS -> SEX_UPON_OUTCOME (Spayed Female, Neutered Male) -- 동물의 아이디와 생물 종, 이름을 조회 -- 아이디 순으로 조회 나의 코드 -- 출력할 컬럼 선정 SELECT INS.ANIMAL_ID, INS.ANIMAL_TYPE, INS.NAME -- 테이블 선정 및 테이블 JOIN FROM ANIMAL_INS INS INNER JOIN ANIMAL_OUTS OUTS ON IN..
![[Programmers] no59413: 입양 시각 구하기(2)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FSYSDZ%2Fbtr6rxLQqmD%2FAAAAAAAAAAAAAAAAAAAAAFVyit5s5B4GWbg6IAdVqhDTkZP2mD90BOLM64_21AAw%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D0C5G1F2JIbI776lURsc1r67ePXY%253D)
[Programmers] no59413: 입양 시각 구하기(2)
문제 -- 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. -- 0시부터 23시까지, -- 각 시간대별로 입양이 몇 건이나 발생했는지 조회 -- 결과는 시간대 순으로 정렬 풀이방법 1. SET함수로 변수선언하여 0부터 23까지의 시간대를 갖는 테이블을 생성 * 이 과정이 없으면, COUNT 값이 0인 LOW를 표시할 수 없다 2. COUNT 컬럼의 경우, 서브쿼리를 이용해 구하며, 이때 기준은 HOUR 변수로 WHERE로 필터링 3. 컬럼을 만들어 두었으므로, 따로 정렬하지 않아도 자도 오름차순 정렬됨 나의 코드 -- SET @을 이용해 변수선언 SET @HOUR = -1; -- 변수를 이용해 0부터 23까지의 테이블 LOW를 만들어줌 -- COUNT는 기존 테이블에서 시간값이 @..
![[백준] no11727: 2×n 타일링 2](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FYyo3Z%2Fbtr6tWLicxz%2FAAAAAAAAAAAAAAAAAAAAAHz_FCZyqQTAur3ODs3TcaSL9JR3Q3wO4CdlIYpE6YC_%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DvH6H8MVpF0AtH0QHEF9OVCfDnXA%253D)
[백준] no11727: 2×n 타일링 2
문제 Input 채울 길이 N Output 위의 1*2, 2*1, 2*2 세 가지 모양의 블록을 이용해 N*2의 블록을 채우는 경우의 수를 10007로 나누어 나머지를 출력 조건 1 3 3 -> 5 4 -> 11 5 -> 21 6 -> 43 7 -> 85 8 -> 171 ... N -> (N-1번째) + (N-2번째)*2 풀이방법 N번째 경우의 수 = (N-1번째 경우의 수) + (N-2번째 경우의 수)*2 나의 코드 1. Int형 배열 사용 [14428kb, 128ms] public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)..
![[Programmers] no62284: 우유와 요거트가 담긴 장바구니](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbnlQCa%2Fbtr6odT0cHG%2FAAAAAAAAAAAAAAAAAAAAAGCBeizVxEeTiIf-MsP7DOBYP8ChaQH77nDRvmhzcVjm%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D7kJ%252BPA%252BtpO1al3Uwy657caD4mWk%253D)
[Programmers] no62284: 우유와 요거트가 담긴 장바구니
문제 -- 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니가 있는지 -- 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회 -- 결과는 장바구니의 아이디 순 풀이방법 1. INNER JOIN을 이용한 방법 2. SELF JOIN을 이용한 방법 나의 코드 1. INNER JOIN을 이용한 방법 [가독성이 제일 좋은 것 같다] -- 중복된 아이디를 제거하기 위해 DISTINCT 적용 SELECT DISTINCT MILK.CART_ID -- 아래 두 테이블을 조인함으로써 두 값을 같이 가지는 LOW를 선택가능 -- MILK만 필터링한 테이블 FROM (SELECT CART_ID, NAME FROM CART_PRODUCTS WHERE NAME = "Milk") AS MILK -- YOGUR..
![[Programmers] no131116: 식품분류별 가장 비싼 식품의 정보 조회하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fce0fEq%2Fbtr6qOMyBps%2FAAAAAAAAAAAAAAAAAAAAAP_0cqXU-CuUQUtbH0dOcQ_KAjN-GmMU10mDzdpk4u-o%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D%252FgKrKZHAeiv%252FHRVWvzIz0%252F%252BoG1I%253D)
[Programmers] no131116: 식품분류별 가장 비싼 식품의 정보 조회하기
문제 -- FOOD_PRODUCT 테이블에서 -> SELECT -- 식품분류별로 가격이 제일 비싼 식품의 -> RANK = 1 -- 분류, 가격, 이름을 조회 -> SELECT -- 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력 -> WHERE -- 결과는 식품 가격을 기준으로 내림차순 정렬 -> ORDER BY 풀이방법 1. RANK 함수를 이용한 방식 -- 핵심 문법 RANK() OVER(PARTITION BY CATEGORY ORDER BY PRICE DESC) AS FOOD_RANK : RANK()를 이용해 FOOD_RANK컬럼을 만들거 줄 것이며, PARTITION BY을 이용해 랭킹매길 그룹조건을, ORDER BY를 이용해 랭킹 순위 판정 기준을 세팅 * PARTITI..
![[Programmers] no131117: 5월 식품들의 총매출 조회하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FUAPc9%2Fbtr6qN7XA5a%2FAAAAAAAAAAAAAAAAAAAAAG-rpDOXlgLXGn8r_LlalVBKVmmtzlaq9Tvt6p4hI59P%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DR0IlLcfuhN%252B7LNMeSWGx1bDjbDw%253D)
[Programmers] no131117: 5월 식품들의 총매출 조회하기
문제 -- FOOD_PRODUCT와 FOOD_ORDER 테이블에서 -> FROM & JOIN -- 생산일자가 2022년 5월인 식품들의 -> WHERE -- 식품 ID, 식품 이름, 총매출을 조회 -> SELECT -- 이때 결과는 총매출을 기준으로 내림차순 정렬 -> ORDER BY -- 총매출이 같다면 식품 ID를 기준으로 오름차순 정렬 -> ORDER BY 나의 코드 -- 출력할 컬럼값 선택 SELECT FP.PRODUCT_ID, FP.PRODUCT_NAME, -- '주문의 양 * 주문가격 = 총 매출'로 계산할 것이며, GROUP BY에서 기준을 제품ID로 지정 SUM(FO.AMOUNT * FP.PRICE) AS TOTAL_SALES -- 테이블 선택 및 JOIN 부분 FROM FOOD_PRODU..
![[Programmers] no131118: 서울에 위치한 식당 목록 출력하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FwFi4G%2Fbtr53CmFkPj%2FAAAAAAAAAAAAAAAAAAAAAM5e-oECTcJP1NxYRCk84hCdKzowCDMeanSi-J6ls5t7%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DfUhwXkAiR%252FP5kza8SXqvcsbNKqw%253D)
[Programmers] no131118: 서울에 위치한 식당 목록 출력하기
문제 -- REST_INFO와 REST_REVIEW 테이블에서 -> FROM, JOIN -- 서울에 위치한 식당들의 WHERE -- 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회 -> SELECT -- 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 -> ROUND, 2 [이게 핵심] -- 결과는 평균점수를 기준으로 내림차순 정렬 -> ORDER BY -- 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬 -> ORBER BY 풀이방법 핵심함수 : ROUND(AVG()) + GROUP BY() 나의 코드 방법 1 : REVIEW 테이블을 JOIN하기 전에 SCORE를 구해서 JOIN SELECT RI.REST_ID, RI.REST_NAME, RI.FOOD_TYPE, ..
![[Programmers] no131124: 그룹별 조건에 맞는 식당 목록 출력하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FPIJ29%2Fbtr53DZTxqb%2FAAAAAAAAAAAAAAAAAAAAAJ_x6e_u6gp68E9H2rIf4oDqC5ycCb9PeI1xuomdw-O3%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D4ajqlCj8AHA5wYGJSWL1e74vTdE%253D)
[Programmers] no131124: 그룹별 조건에 맞는 식당 목록 출력하기
문제 풀이방법 1. RANK() 함수 사용 RANK() OVER(ORDER BY 랭킹_조건) AS 컬럼명 -- 즉, 특정 테이블에서 특정 조건에 맞춰 RANK 값을 갖는 컬럼을 만드는 함수 -- 예시: -- INNER JOIN ( -- SELECT JOIN_공통컬럼, RANK() OVER(ORDER BY COUNT(식별자) DESC) AS 컬럼명 -- FROM 테이블 RR -- GROUP BY 식별자 -- ) AS RRR ON RRR.공통컬럼 LIKE RR.공통컬럼 1. 서브쿼리로 REST_REVIEW 테이블에서 각 MEMBER_ID에 대해 빈도수를 COUNT하여, RANK 컬럼 만들어줌 2. 이 때, MEMBER_ID도 같이 엮어줘야 JOIN이 가능하므로, MEMBER_ID도 SELECT하여 JOIN ..
![[백준] no10026: 적록색약](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbJK6b3%2Fbtr591esV5N%2FAAAAAAAAAAAAAAAAAAAAALsz-mgdMtCBau_kE3CPpC7f_-vj1EVWdkiP8Ip7VUaW%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D4AncUefX5Sg%252FJtXEFt22SbyuXSM%253D)
[백준] no10026: 적록색약
문제 Input 1. 첫 째줄에 맵의 크기 2. 둘 째줄부터 순차적으로 색상값으로 이루어진 문자열 * 이때, 구분을 위한 공백이 없으므로 StringTokenizer는 불가. 그냥 String.split사용 Output 일반일 경우와 색약일 경우를 공백 하나로 나누어 출력 * 이때, Writer보단 StrngBuilder가 효율이 좋음 문제 링크 : https://www.acmicpc.net/problem/10026 원리 1. BFS를 이용한 상하좌우 탐색 2. 두 가지 케이스로 나누어 탐색 동시진행 * 필요시 색상을 나눠서 각각 count 가능 풀이방법 /** * 1. BFS 탐색하되, 일반과 색약일 때 두 가지 탐색 동시진행 * 2. 이중 반복으로 순차적으로 순회하되, 방문한 곳은 아님 * 3. 첫 ..