오늘도 강의를 듣고 알고리즘, SQL을 풀었다.
오늘의 알고리즘 문제는 '내적'이었다.
문제는 아래와 같다.
길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.
이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)
제한사항
a, b의 길이는 1 이상 1,000 이하입니다.
a, b의 모든 수는 -1,000 이상 1,000 이하입니다.
A, B의 길이는 같으므로, 단순히 for문을 이용해 int i를 ++해가며 곱하고 answer에 더하면 된다.
제출한 코드는 아래와 같다.
class Solution {
public int solution(int[] a, int[] b) {
int answer = 0;
for (int i = 0; i < a.length; i++) {
answer += a[i] * b[i];
}
return answer;
}
}
sql문제는 상품 별 오프라인 매출 구하기 였다.
문제는 아래와 같다.
PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요.
PRODUCT_ID를 매개로 두 테이블을 JOIN 해주고, 상품 코드 별 매출액이므로 상품코드로 묶어준다(GROUP BY)
SUM을 이용하여 상품코드 별 매출액을 구할 수 있다.
제출한 코드는 아래와 같다.
SELECT
P.PRODUCT_CODE,
SUM(P.PRICE * S.SALES_AMOUNT) AS SALES
FROM
PRODUCT P
JOIN
OFFLINE_SALE S ON P.PRODUCT_ID = S.PRODUCT_ID
GROUP BY
P.PRODUCT_CODE
ORDER BY
SALES DESC,
P.PRODUCT_CODE ASC;
처음으로 기술 모의 면접을 보았다.
5개의 문제가 나왔고, 각 질문에 답은 하였으나 꼬리질문에 대답을 못한것들이 조금 있었다.
전체적인 피드백은 '키워드는 잘 뽑아내는데 살을 붙이는 연습이 필요하다' 였다.
자세하게 적기에는 타 캠프원들이 볼 수도 있고 하여 나중에 적는 것이 좋아보인다.
처음이라 긴장도 하고 부족한 점이 많았지만 튜터님께서 웃으면서 편하게 진행해주셔서 아는것은 다 말한 것 같았다.
면접할 때 안떠는 방법을 배웠다.
1. 질문의 의도 파악
2. 키워드 뽑기
3. 키워드에 살 붙이기(논리정연하게 정리)
4. Sorting을 하면서 어떤 순서대로 말을 할지 정리.
위와 같다.
그리고 TIL을 쓸 때, 매일 푸는 알고리즘과 SQL을 적고, 처음 보거나 잘 모르겠는 알고리즘이나 자료구조가 나왔을 때 하나씩 정리하는 것이 좋다고 들었다. 그에 더불어 기술 면접 질문을 하나씩 정리하면 더 좋을것같다고 하셨다. 내일부터 면접 질문도 같이 정리해보려고 한다.