TIL/코딩테스트 연습문제

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

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

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

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

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


알고리즘 코드카타

가장 작은 수 제거하기 문제 해결하기


가장 작은 수 제거하기 문제 해결하기

이번 포스트에서는 프로그래머스에서 제공하는 가장 작은 수 제거하기 문제를 해결해보겠습니다. 이 문제는 배열에서 가장 작은 수를 제거한 새로운 배열을 반환하는 문제입니다. 만약 배열이 빈 배열이 되면 -1을 포함한 배열을 반환합니다.

문제 설명

정수를 저장한 배열 arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수 solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를 들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴하고, [10]인 경우는 [-1]을 리턴합니다.

제한 조건

  • arr은 길이 1 이상인 배열입니다.
  • 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.

입출력 예

arrreturn

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

해결 방법

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

  1. 배열 arr이 길이 1인 경우, [-1]을 반환합니다.
  2. 배열 arr에서 가장 작은 수를 찾습니다.
  3. 가장 작은 수를 제외한 새로운 배열을 생성하여 반환합니다.

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

import java.util.Arrays;

public class Solution {
    public int[] solution(int[] arr) {
        if (arr.length == 1) {
            return new int[]{-1};
        }

        // 배열에서 가장 작은 수 찾기
        int minValue = Arrays.stream(arr).min().getAsInt();

        // 가장 작은 수를 제외한 배열 생성
        return Arrays.stream(arr).filter(value -> value != minValue).toArray();
    }

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

코드 설명

  1. 배열 arr의 길이가 1인 경우 [-1]을 반환합니다.
  2. Arrays.stream(arr)을 사용하여 배열 arr의 스트림을 생성하고, min().getAsInt()로 가장 작은 값을 찾습니다.
  3. filter(value -> value != minValue)를 사용하여 가장 작은 값을 제외한 스트림을 생성하고, 이를 배열로 변환하여 반환합니다.

SQL 코드카타

주어진 문제를 해결하기 위해, FIRST_HALF 테이블에서 아이스크림 맛을 총주문량을 기준으로 내림차순 정렬하고, 총주문량이 같다면 출하 번호를 기준으로 오름차순 정렬하여 조회하는 SQL 쿼리를 작성해보겠습니다.

테이블 구조

  • SHIPMENT_ID: INT, 출하 번호
  • FLAVOR: VARCHAR, 아이스크림 맛
  • TOTAL_ORDER: INT, 상반기 아이스크림 총주문량

예시 데이터

SHIPMENT_IDFLAVORTOTAL_ORDER

101 chocolate 3200
102 vanilla 2800
103 mint_chocolate 1700
104 caramel 2600
105 white_chocolate 3100
106 peach 2450
107 watermelon 2150
108 mango 2900
109 strawberry 3100
110 melon 3150
111 orange 2900
112 pineapple 2900

SQL 쿼리

SELECT
    FLAVOR
FROM
    FIRST_HALF
ORDER BY
    TOTAL_ORDER DESC,
    SHIPMENT_ID ASC;

쿼리 설명

  1. SELECT 문: FLAVOR 컬럼을 선택합니다.
  2. FROM 문: FIRST_HALF 테이블에서 데이터를 가져옵니다.
  3. ORDER BY 문:
    • TOTAL_ORDER를 기준으로 내림차순 정렬합니다 (DESC).
    • TOTAL_ORDER가 같은 경우 SHIPMENT_ID를 기준으로 오름차순 정렬합니다 (ASC).

결과

위의 SQL 쿼리를 실행하면, 주어진 예시 데이터에 대해 다음과 같은 결과가 반환됩니다:

FLAVOR

chocolate
melon
white_chocolate
strawberry
mango
orange
pineapple
vanilla
caramel
peach
watermelon
mint_chocolate

이 쿼리를 통해 주어진 조건에 맞게 데이터를 정확하게 정렬하여 조회할 수 있습니다.

느낀점

힘들다