TIL/코딩테스트 연습문제

[내일배움캠프] 사전캠프 코드카타 32번 문제

통촏하여주시옵소서 2024. 9. 3. 15:55

TIL 제출하기(매일 23:59 까지)
❤️‍🔥TIL : Today I Learned

매일 저녁, 공부를 마무리하면서 제출해주세요.
하루에 1%씩만 나아가도 4개월 동안 쌓이면 꽤 덩치가 커진답니다 :)

[TIL을 쓰는 이유]
1. 스스로 어제보다 한 발 더 나아갔다는 것을 자각하기
2. TIL을 쓰기 위해서라도, 오늘 반드시 단 하나라도 배우기
3. 꾸준히 기록을 남기는 습관 가지기


알고리즘 코드카타

두 배열의 내적 구하기 문제 해결하기


이번 포스트에서는 주어진 두 1차원 정수 배열 a와 b의 내적을 구하는 문제를 해결해보겠습니다. 이 문제는 배열의 각 요소를 곱한 후 그 합을 구하는 문제입니다.

문제 설명

길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 리턴하도록 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 이하입니다.

입출력 예

abresult

[1,2,3,4] [-3,-1,0,2] 3
[-1,0,1] [1,0,-1] -2

입출력 예 설명

  • 예제 1: a와 b의 내적은 1*(-3) + 2*(-1) + 3*0 + 4*2 = 3 입니다.
  • 예제 2: a와 b의 내적은 (-1)*1 + 0*0 + 1*(-1) = -2 입니다.

해결 방법

이 문제를 해결하기 위해서는 다음과 같은 단계를 밟아야 합니다.

  1. 배열 a와 b의 길이가 같으므로, 반복문을 통해 각 인덱스의 요소들을 곱하고 이를 합산합니다.
  2. 최종 합산된 값을 반환합니다.

아래는 이 문제를 해결하기 위한 Java 코드입니다.

public class Solution {
    public int solution(int[] a, int[] b) {
        int sum = 0;
        for (int i = 0; i < a.length; i++) {
            sum += a[i] * b[i];
        }
        return sum;
    }

    public static void main(String[] args) {
        Solution sol = new Solution();
        System.out.println(sol.solution(new int[]{1, 2, 3, 4}, new int[]{-3, -1, 0, 2})); // 3
        System.out.println(sol.solution(new int[]{-1, 0, 1}, new int[]{1, 0, -1}));        // -2
    }
}

코드 설명

  1. int sum = 0;을 선언하여 내적의 합을 저장할 변수를 초기화합니다.
  2. for 루프를 사용하여 배열 a와 b의 각 요소를 곱하고 sum에 더합니다.
  3. 루프가 종료되면 최종 합산된 sum을 반환합니다.

SQL 코드카타

주어진 문제를 해결하기 위해, BOOK 테이블과 BOOK_SALES 테이블을 조인하여 2022년 1월의 카테고리별 도서 판매량을 합산하는 SQL 쿼리를 작성하겠습니다. 결과는 카테고리명을 기준으로 오름차순 정렬합니다.

테이블 구조

  • BOOK
    • BOOK_ID: INTEGER, 도서 ID
    • CATEGORY: VARCHAR(N), 카테고리 (경제, 인문, 소설, 생활, 기술)
    • AUTHOR_ID: INTEGER, 저자 ID
    • PRICE: INTEGER, 판매가 (원)
    • PUBLISHED_DATE: DATE, 출판일
  • BOOK_SALES
    • BOOK_ID: INTEGER, 도서 ID
    • SALES_DATE: DATE, 판매일
    • SALES: INTEGER, 판매량

예시 데이터

BOOK 테이블:

BOOK_IDCATEGORYAUTHOR_IDPRICEPUBLISHED_DATE

1 인문 1 10000 2020-01-01
2 경제 1 9000 2021-02-05
3 경제 2 9000 2021-03-11

BOOK_SALES 테이블:

BOOK_IDSALES_DATESALES

1 2022-01-01 2
2 2022-01-02 3
1 2022-01-05 1
2 2022-01-20 5
2 2022-01-21 6
3 2022-01-22 2
2 2022-02-11 3

SQL 쿼리

SELECT
    B.CATEGORY,
    SUM(S.SALES) AS TOTAL_SALES
FROM
    BOOK B
JOIN
    BOOK_SALES S
ON
    B.BOOK_ID = S.BOOK_ID
WHERE
    S.SALES_DATE BETWEEN '2022-01-01' AND '2022-01-31'
GROUP BY
    B.CATEGORY
ORDER BY
    B.CATEGORY ASC;

쿼리 설명

  1. SELECT 문: B.CATEGORY와 SUM(S.SALES) AS TOTAL_SALES를 선택합니다. SUM(S.SALES)는 각 카테고리별 총 판매량을 계산합니다.
  2. FROM 문: BOOK 테이블과 BOOK_SALES 테이블을 선택합니다.
  3. JOIN 문: BOOK 테이블과 BOOK_SALES 테이블을 BOOK_ID를 기준으로 조인합니다.
  4. WHERE 문: SALES_DATE가 2022년 1월인 데이터만 필터링합니다 (2022-01-01부터 2022-01-31까지).
  5. GROUP BY 문: CATEGORY별로 그룹화합니다.
  6. ORDER BY 문: CATEGORY를 기준으로 오름차순 정렬합니다.

결과

위의 SQL 쿼리를 실행하면 주어진 예시 데이터에 대해 다음과 같은 결과를 얻을 수 있습니다:

CATEGORYTOTAL_SALES

경제 16
인문 3

이와 같이, 2022년 1월의 카테고리별 도서 판매량을 정확하게 합산하고 카테고리명을 기준으로 오름차순 정렬할 수 있습니다.


느낀점