TIL/코딩테스트 연습문제

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

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

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

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

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


알고리즘 코드카타

문자열 내림차순 정렬 문제 해결하기

이번 포스트에서는 문자열 s를 내림차순으로 정렬하는 문제를 해결해보겠습니다. 이 문제는 문자열을 정렬하는 간단한 문제로, 대문자는 소문자보다 작은 것으로 간주합니다.

문제 설명

문자열 s에 나타나는 문자를 큰 것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수 solution을 완성해주세요. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

제한 사항

  • s는 길이 1 이상인 문자열입니다.

입출력 예

sreturn

"Zbcdefg" "gfedcbZ"

해결 방법

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

  1. 문자열 s를 문자 배열로 변환합니다.
  2. 문자 배열을 정렬합니다. 정렬 시 대문자가 소문자보다 작게 간주되도록 합니다.
  3. 정렬된 문자 배열을 역순으로 배열합니다.
  4. 새로운 문자열로 변환하여 반환합니다.

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

import java.util.Arrays;
import java.util.Collections;

public class Solution {
    public String solution(String s) {
        // 문자열을 문자 배열로 변환
        Character[] charArray = new Character[s.length()];
        for (int i = 0; i < s.length(); i++) {
            charArray[i] = s.charAt(i);
        }

        // 문자 배열을 내림차순으로 정렬
        Arrays.sort(charArray, Collections.reverseOrder());

        // 정렬된 문자 배열을 문자열로 변환
        StringBuilder sb = new StringBuilder();
        for (char c : charArray) {
            sb.append(c);
        }

        return sb.toString();
    }

    public static void main(String[] args) {
        Solution sol = new Solution();
        System.out.println(sol.solution("Zbcdefg")); // "gfedcbZ"
    }
}

코드 설명

  1. Character[] charArray = new Character[s.length()];를 사용하여 문자열 s를 문자 배열로 변환합니다.
  2. Arrays.sort(charArray, Collections.reverseOrder());를 사용하여 문자 배열을 내림차순으로 정렬합니다.
  3. StringBuilder를 사용하여 정렬된 문자 배열을 문자열로 변환합니다.
  4. 최종 결과 문자열을 반환합니다.

SQL 코드카타

주어진 문제를 해결하기 위해, 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL 쿼리를 작성하겠습니다. 결과는 보호 시작일이 빠른 순으로 정렬해야 합니다.

테이블 구조

  • ANIMAL_INS 테이블:
    • ANIMAL_ID: VARCHAR(N), 동물 ID
    • ANIMAL_TYPE: VARCHAR(N), 생물 종
    • DATETIME: DATETIME, 보호 시작일
    • INTAKE_CONDITION: VARCHAR(N), 보호 시작 시 상태
    • NAME: VARCHAR(N), 이름
    • SEX_UPON_INTAKE: VARCHAR(N), 성별 및 중성화 여부
  • ANIMAL_OUTS 테이블:
    • ANIMAL_ID: VARCHAR(N), 동물 ID
    • ANIMAL_TYPE: VARCHAR(N), 생물 종
    • DATETIME: DATETIME, 입양일
    • NAME: VARCHAR(N), 이름
    • SEX_UPON_OUTCOME: VARCHAR(N), 성별 및 중성화 여부

SQL 쿼리

SELECT
    INS.ANIMAL_ID,
    INS.NAME
FROM
    ANIMAL_INS INS
JOIN
    ANIMAL_OUTS OUTS
ON
    INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE
    INS.DATETIME > OUTS.DATETIME
ORDER BY
    INS.DATETIME;

쿼리 설명

  1. SELECT 문: ANIMAL_INS 테이블의 ANIMAL_ID와 NAME 컬럼을 선택합니다.
  2. FROM 문: ANIMAL_INS 테이블을 기준으로 ANIMAL_OUTS 테이블과 조인합니다.
  3. JOIN 문: ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블을 ANIMAL_ID를 기준으로 조인합니다.
  4. WHERE 문: 보호 시작일 (INS.DATETIME)이 입양일 (OUTS.DATETIME)보다 늦은 경우를 필터링합니다.
  5. ORDER BY 문: 보호 시작일 (INS.DATETIME)을 기준으로 오름차순 정렬합니다.

결과

위의 SQL 쿼리를 실행하면 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 보호 시작일이 빠른 순으로 조회할 수 있습니다. 예시 데이터에서 쿼리를 실행하면 다음과 같은 결과가 나옵니다:

ANIMAL_IDNAME

A381217 Cherokee

이 쿼리를 통해 관리자의 실수로 인해 보호 시작일보다 입양일이 더 빠른 동물의 정보를 정확히 조회할 수 있습니다.


느낀점