2024_08_27 Kata

SJ.CHO·2024년 8월 27일

알고리즘 Kata

55.

  • 문제 설명 :
  • 답안 :
public class Solution {
	public String solution(String[] cards1, String[] cards2, String[] goal) {
		String answer = "Yes";
		int card1idx = 0;
		int card2idx = 0;
		for (int i = 0; i < goal.length; i++) {
			if (card1idx < cards1.length && goal[i].equals(cards1[card1idx])) {
				card1idx++;
				continue;
			}
			if (card2idx < cards2.length && goal[i].equals(cards2[card2idx])) {
				card2idx++;
				continue;
			}
			answer = "No";
			return answer;
		}
		return answer;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Solution s = new Solution();
		String cards1[] = { "i", "drink", "water" };
		String cards2[] = { "want", "to" };
		String goal[] = { "i", "want", "to", "drink", "water" };
		System.out.println(s.solution(cards1, cards2, goal));
	}
}
  • 알고리즘 설명 : goal 배열을 순회하며 cards1,2 배열 idx를 생성. 해당 idx보다 크기가 크지않고, goal 배열idx와 순번이 일치할시 성공하게 작성.

SQL Kata

49.

문제 설명
다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블입니다. FOOD_PRODUCT 테이블은 다음과 같으며 PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE는 식품 ID, 식품 이름, 식품코드, 식품분류, 식품 가격을 의미합니다.

Column name Type Nullable
PRODUCT_ID VARCHAR(10) FALSE
PRODUCT_NAME VARCHAR(50) FALSE
PRODUCT_CD VARCHAR(10) TRUE
CATEGORY VARCHAR(10) TRUE
PRICE NUMBER TRUE

문제
FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.

Select CATEGORY,PRICE as 'MAX_PRICE',PRODUCT_NAME
from FOOD_PRODUCT 
where(CATEGORY,PRICE)IN(
Select CATEGORY, max(PRICE)
    from FOOD_PRODUCT 
    where CATEGORY IN('과자', '국', '김치', '식용유')
    group by CATEGORY 
)
order by 2 desc
  • max값을 활용해야 하는 group by 문제기에 서브쿼리를 사용하여 해당키워드를 필요로하는 카테고리 키워드의 맥스값을 먼저 도출해낸뒤 한번더 걸러내는 작업을 거쳤음.

50.

다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블과 식품의 주문 정보를 담은 FOOD_ORDER 테이블입니다. FOOD_PRODUCT 테이블은 다음과 같으며 PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE는 식품 ID, 식품 이름, 식품코드, 식품분류, 식품 가격을 의미합니다.

Column name Type Nullable
PRODUCT_ID VARCHAR(10) FALSE
PRODUCT_NAME VARCHAR(50) FALSE
PRODUCT_CD VARCHAR(10) TRUE
CATEGORY VARCHAR(10) TRUE
PRICE NUMBER TRUE

FOOD_ORDER 테이블은 다음과 같으며 ORDER_ID, PRODUCT_ID, AMOUNT, PRODUCE_DATE, IN_DATE, OUT_DATE, FACTORY_ID, WAREHOUSE_ID는 각각 주문 ID, 제품 ID, 주문량, 생산일자, 입고일자, 출고일자, 공장 ID, 창고 ID를 의미합니다.

Column name Type Nullable
ORDER_ID VARCHAR(10) FALSE
PRODUCT_ID VARCHAR(5) FALSE
AMOUNT NUMBER FALSE
PRODUCE_DATE DATE TRUE
IN_DATE DATE TRUE
OUT_DATE DATE TRUE
FACTORY_ID VARCHAR(10) FALSE
WAREHOUSE_ID VARCHAR(10) FALSE

문제
FOOD_PRODUCT와 FOOD_ORDER 테이블에서 생산일자가 2022년 5월인 식품들의 식품 ID, 식품 이름, 총매출을 조회하는 SQL문을 작성해주세요. 이때 결과는 총매출을 기준으로 내림차순 정렬해주시고 총매출이 같다면 식품 ID를 기준으로 오름차순 정렬해주세요.

SELECT f1.PRODUCT_ID,f1.PRODUCT_NAME,SUM(PRICE*AMOUNT) as 'TOTAL_SALES'
from FOOD_PRODUCT f1
left join FOOD_ORDER f2
on f1.PRODUCT_ID = f2.PRODUCT_ID
where date_format(f2.PRODUCE_DATE,'%Y-%m') ='2022-05'
group by 1
order by 3 desc,1
  • 두 테이블을 join을 이용하여 풀어야하는 문제로 date_format과 sum()함수를 사용하면 간단하게 풀수있는 문제이다.
    고려해야할 점은 매출액에 대한 컬럼이 따로 존재하지 않기에 수량과 가격을 이용하여 풀어야한다는 점 정도. (보통 판매가 되야 매출이 잡힐텐데 100% 주문제작으로 나가는 기업인듯하다...)
profile
70살까지 개발하고싶은 개발자

0개의 댓글