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
https://playnplayer.tistory.com/manage/posts/
기본 예제와 함께 정리해 두었다.
'(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 |