본문 바로가기
(2024-10) 스파르타 내일배움캠프 - 백엔드/TIL

(2024-11-26) TIL

by 어뫄어뫄 2024. 11. 26.

1.데일리 루틴(SQL)

SELECT
    o.ANIMAL_ID, o.NAME
FROM
    ANIMAL_OUTS o LEFT JOIN ANIMAL_INS i on o.ANIMAL_ID = i.ANIMAL_ID
WHERE
    i.ANIMAL_ID is null
ORDER BY
    o.ANIMAL_ID

 

데일리 루틴 문제는 JOIN을 얼마나 이해하고 있느냐에 대한 문제에 가까웠다.

 

LEFT JOIN과 WHERE 절은 집합 개념으로 이해할 수 있다. LEFT JOIN은 두 개의 테이블을 결합하는 건데, 왼쪽 테이블(ANIMAL_OUTS)의 모든 요소를 유지하고, 오른쪽 테이블(ANIMAL_INS)에서 일치하는 요소를 찾아서 결합한다. 만약 오른쪽 테이블에 일치하는 요소가 없다면 NULL 값으로 채워진다. 이렇게 해서 왼쪽 테이블의 모든 요소가 포함된 새로운 집합이 만들어진다.

 

그 다음에 WHERE 절은 이렇게 만들어진 집합에서 특정 조건을 만족하는 요소만 걸러낸다. 즉, LEFT JOIN의 결과에서 오른쪽 집합에 해당하는 값이 NULL인 경우, 그건 두 집합 간의 교집합이 없다는 뜻이다. 결국 LEFT 테이블에만 있는 요소들로 이루어진 최종 결과 집합이 반환된다.

 

 

 

 

2.데일리 루틴(Java)

 

어렴풋하게 이해하던 String 관련 내용들을 정리했다. 나중에 참조하기 편하게 테이블 표로 정리했다.

 

       
특성 String StringBuilder StringBuffer
변경 가능성 불변(Immutable) 가변(Mutable) 가변(Mutable)
메모리 할당 String Constant Pool에 저장 Heap에 저장 Heap에 저장
주소 비교 리터럴로 초기화 시 같은 값은 같은 주소를 참조 같은 값이라도 서로 다른 주소를 참조 같은 값이라도 서로 다른 주소를 참조
동기화 지원하지 않음 지원하지 않음 지원함 (멀티 스레드 환경에서 안전)
주 사용 용도 변하지 않는 문자열 처리 단일 스레드 환경에서 문자열 자주 수정 시 멀티 스레드 환경에서 문자열 자주 수정 시
예시 코드 String strA = "abc"; StringBuilder sbd = new StringBuilder(); StringBuffer sbf = new StringBuffer();

 

 

 

나는 조건에 따라 String Builder를 쓰기로 결심하고 이를 토대로 문제를 풀었다.

 

 

import java.lang.StringBuilder;

class Solution {
    public String solution(int[] food) {
        StringBuilder sbd = new StringBuilder();

        for (int i = 1; i < food.length; i++) {
            repeatAppend(sbd, food[i] / 2, i);
        }

        String original = sbd.toString(); 

        sbd.append("0"); 

        sbd.append(new StringBuilder(original).reverse());

        String result = sbd.toString();
        return result;
    }
    
    public static void repeatAppend(StringBuilder sbd, int repeatCount, int number) {
        for (int i = 0; i < repeatCount; i++) {
            sbd.append(number);
        }
    }
}

 

코드에서 StringBuilder를 활용한 예를 살펴보면, 특정 정수 배열의 값을 기반으로 문자열을 생성하는 과정을 확인할 수 있다. 주어진 배열에서 각 요소의 절반만큼 반복해 숫자를 추가하는 repeatAppend 메서드를 사용하여 StringBuilder에 문자열을 구성한다다. 그런 다음, 이 문자열을 뒤집고 가운데에 "0"을 추가함으로써 최종 결과 문자열을 생성한다.

 

본문에서는 append로 요소를 추가하고, reverse()로 담긴 값을 바꾸었다. toString으로 String 형태의 값을 확보하였다.

 

 

String, StringBuilder, StringBuffer 참조: https://velog.io/@heoseungyeon/StringBuilder%EC%99%80-StringBuffer%EB%8A%94-%EB%AC%B4%EC%8A%A8-%EC%B0%A8%EC%9D%B4%EA%B0%80-%EC%9E%88%EB%8A%94%EA%B0%80

 

문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/134240

 

 

3. Java Reflect(Constructor)

 

https://playnplayer.tistory.com/47

 

예시로 함께 보는 Reflect와 Constructor(1)

아래 예제는 Java Reflection을 사용하여 두 요소를 실습합니다.:생성자 탐색:클래스의 생성자 목록을 동적으로 가져오고 출력합니다.객체 동적 생성:제공된 인자에 따라 적합한 생성자를 선택하여

playnplayer.tistory.com

https://playnplayer.tistory.com/manage/posts/

 

티스토리

좀 아는 블로거들의 유용한 이야기, 티스토리. 블로그, 포트폴리오, 웹사이트까지 티스토리에서 나를 표현해 보세요.

www.tistory.com

 

 

기본 예제와 함께 정리해 두었다.

 

 

 

'(2024-10) 스파르타 내일배움캠프 - 백엔드 > TIL' 카테고리의 다른 글

(2024-11-28) TIL  (0) 2024.11.28
(2024-11-27) TIL  (1) 2024.11.27
(2024-11-25) TIL  (0) 2024.11.25
(2024-11-22) TIL  (0) 2024.11.22
(2024-11-21) 스파르타 키오스크 과제  (0) 2024.11.21