목차
문제 이름 및 링크
공백으로 구분하기2
https://school.programmers.co.kr/learn/courses/30/lessons/181868
출제 사이트
프로그래머스
문제유형 및 난이도
문제유형: 문자열
난이도: 0레벨
코드 설명
주어진 문자열에서 공백을 삭제하고 얻은 단어의 배열만 반환하는 문제였습니다.
단순히 공백 기준으로 split하였고 얻어진 단어가 빈 문자가 아니라면 리스트에 넣은 후 배열로 반환해주는 방법론으로 풀었습니다.
import java.util.*;
class Solution {
public String[] solution(String my_string) {
String[] my_strings = my_string.split(" ");
List<String> list = new LinkedList<>();
for(String str : my_strings) {
if(str.equals(" ") || str.equals("")) {
// do Nothing
} else {
list.add(str);
}
}
return list.toArray(new String[list.size()]);
}
}
0레벨 문제였지만 다른 사람들의 코드에서 새로운걸 얻어 갔습니다.
trim 메서드로 앞뒤 공백을 자르고 정규화로 문자가 하나 이상 있는 경우만 얻어가는 방법도 재밌어보였습니다.
class Solution {
public String[] solution(String my_string) {
return my_string.trim().split("[ ]+");
}
}
혹은 백준에서 문제 풀 때, 입력값을 받기 위해 자주 사용하던 StringTokenizer의 원리를 이용하여 푼 사례도 재밌었습니다.
import java.util.*;
class Solution {
public String[] solution(String my_string) {
StringTokenizer st = new StringTokenizer(my_string);
int N = st.countTokens();
String[] result = new String[N];
for (int n = 0;n < N;n++)
result[n] = st.nextToken();
return result;
}
}
문자열 문제는 항상 쓰던 방식의 메서드들로 문제 해결을 진행하는 것 같은데요.
이렇게 문자열에 지원되는 다양한 메서드들로 해결하는 방법들이 참 재밌는 것 같습니다.
'알고리즘 > 코딩테스트 준비' 카테고리의 다른 글
구명보트 - Greedy에서 Priority Queue 활용법 (0) | 2023.09.20 |
---|---|
마지막 두 원소 - 쉬운 문제라도 읽기 편한 코딩을 하자 (0) | 2023.08.21 |
카펫 - 수학적으로 풀었다고 생각한 풀이와 진짜 수학적 풀이 (0) | 2023.08.16 |
짝지어 제거하기 (0) | 2023.08.14 |
다음 큰 숫자 - Integer.bitCount()의 발견 (0) | 2023.08.14 |
목차
문제 이름 및 링크
카펫
https://school.programmers.co.kr/learn/courses/30/lessons/42842
출제 사이트
프로그래머스
문제유형 및 난이도
문제유형: 완전탐색
난이도: 레벨2
코드 설명
아래의 코드는 제가 나름 수학적인 접근이라고 생각했던 풀이입니다.
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2]; // 순서대로 가로, 세로 크기를 담아야 함
// yellow가 두 곱의 형태로 나타나는 조합을 찾는다.
// ex) 24 => 2*12, 3*8, 4*6
for(int i=1; i<=Math.sqrt(yellow); i++) {
if(yellow%i==0) { // 가로가 세로 길이보다 길거나 같아야 한다.
int width = (int) yellow/i;
int length = i;
// 나온 조합에서 좌항 우항에 2를 더한 값으로 곱 연산을 만든다.
// ex) 2*12 => 4*14, 4*6 => 6*8
int fullSize = (width+2)*(length+2);
// 만약 2를 더한 값으로 만든 결과에서 yellow 개수를 뺐을 때, brown과 같은 값을 가진다면 반환한다.
// ex) 6*8 - 24 = 24
if(fullSize-yellow==brown) {
answer[0] = width+2;
answer[1] = length+2;
}
}
}
return answer;
}
}
하지만 진짜 수학적 풀이는 이거였습니다.
import java.util.*;
class Solution {
public int[] solution(int brown, int red) {
int a = (brown+4)/2;
int b = red+2*a-4;
int[] answer = {(int)(a+Math.sqrt(a*a-4*b))/2,(int)(a-Math.sqrt(a*a-4*b))/2};
return answer;
}
}
방정식으로 풀이를 풀어내어 근의 공식을 쓰는 방식으로 푸는 방법은 생각도 못했습니다.
O(1)으로 줄인게 굉장히 인상적이었습니다.
'알고리즘 > 코딩테스트 준비' 카테고리의 다른 글
마지막 두 원소 - 쉬운 문제라도 읽기 편한 코딩을 하자 (0) | 2023.08.21 |
---|---|
공백으로 구분하기2 - 문자열 문제는 쓰는 기능만 쓰게 되는 것 같다. trim과 정규화의 활용성 (0) | 2023.08.17 |
짝지어 제거하기 (0) | 2023.08.14 |
다음 큰 숫자 - Integer.bitCount()의 발견 (0) | 2023.08.14 |
코딩테스트 기록을 블로그에 남기려고 합니다. (0) | 2023.08.14 |
목차
문제 이름 및 링크
짝지어 제거하기
https://school.programmers.co.kr/learn/courses/30/lessons/12973
출제 사이트
프로그래머스
문제유형 및 난이도
문제유형: 스택
난이도: Level2
코드 설명
문제를 보고 한 번의 순회에 끝내야 시간복잡도 내에 결과를 낼 수 있겠다 생각하였습니다.
고민해보니 애니팡 게임 처럼 같은걸 만나자마자 팡하고 터져서 없어지게하면 되지 않을까라는 생각을 했습니다.
스택을 이용하면 해당 아이디어가 구현되겠다라는 생각을 하게 되었습니다.
만약 스택이 비어 있으면 문자를 넣고 스택에 값이 있다면 제일 위의 값이 넣으려는 문자와 같은지 확인한 다음 같다면 삭제하는 알고리즘을 생각했습니다.
그 결과 나온 코드는 아래와 같습니다.
import java.util.*;
class Solution {
public int solution(String s) {
Stack<Character> stack = new Stack<>();
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
if(stack.size()==0) stack.push(c);
else {
if(stack.peek()==c) stack.pop();
else stack.push(c);
}
}
return stack.size()==0 ? 1:0;
}
}
한 번에 정확도와 효율성 검사 모두 통과하는 건 너무 기분이 좋습니다.
'알고리즘 > 코딩테스트 준비' 카테고리의 다른 글
마지막 두 원소 - 쉬운 문제라도 읽기 편한 코딩을 하자 (0) | 2023.08.21 |
---|---|
공백으로 구분하기2 - 문자열 문제는 쓰는 기능만 쓰게 되는 것 같다. trim과 정규화의 활용성 (0) | 2023.08.17 |
카펫 - 수학적으로 풀었다고 생각한 풀이와 진짜 수학적 풀이 (0) | 2023.08.16 |
다음 큰 숫자 - Integer.bitCount()의 발견 (0) | 2023.08.14 |
코딩테스트 기록을 블로그에 남기려고 합니다. (0) | 2023.08.14 |
목차
문제 이름 및 링크
다음 큰 숫자
https://school.programmers.co.kr/learn/courses/30/lessons/12911
출제 사이트
프로그래머스
문제유형 및 난이도
문제유형: 기초
난이도: Level2
코드 설명
기존에 생각했던 방식의 코드는 아래와 같습니다.
class Solution {
public int solution(int n) {
String nBinary = Integer.toBinaryString(n);
int oneCount = countOneInBinaryString(nBinary);
while(true) {
n++;
String newNBinary = Integer.toBinaryString(n);
if(oneCount == countOneInBinaryString(nBinary)) return n;
}
}
private int countOneInBinaryString(String str) {
return str.length() - str.replace("1","").length();
}
}
주어진 숫자를 Integer.toBinaryString으로 이진법 형태로 변형한 뒤, 1의 개수를 셉니다.
n보다 큰 숫자 중 주어진 숫자와 1의 개수가 같은 최소값을 찾기 위해 1씩 증가시키며 이진법 형태로 변형한 뒤 1의 개수를 세 같은지 확인합니다.
문제의 풀이에는 문제가 없었으며 정확도 검사는 통과했습니다.
다만 효율성 검사에서 문제가 발생했습니다.
생각해보니 컴퓨터는 값을 이진법 형태로 기억하고 있을 수 밖에 없습니다.
그러면 이진 비트에서 1의 개수를 세는 연산이 존재할거라 생각했습니다.
그 연산의 메서드가 Integer.bitCount() 였습니다.
Integer.bitCount를 사용한 코드는 아래와 같습니다.
class Solution {
public int solution(int n) {
int oneCount = Integer.bitCount(n);
while(true) {
n++;
if(oneCount == Integer.bitCount(n)) return n;
}
}
}
변형된 코드에서 확인할 수 있듯이 이전 코드는 일을 두 번하게 만드는 코드였습니다.
코드의 본질을 까먹지 말고 활용할 수 있도록 성장하면 좋겠다는 생각이 든 문제였습니다.
'알고리즘 > 코딩테스트 준비' 카테고리의 다른 글
마지막 두 원소 - 쉬운 문제라도 읽기 편한 코딩을 하자 (0) | 2023.08.21 |
---|---|
공백으로 구분하기2 - 문자열 문제는 쓰는 기능만 쓰게 되는 것 같다. trim과 정규화의 활용성 (0) | 2023.08.17 |
카펫 - 수학적으로 풀었다고 생각한 풀이와 진짜 수학적 풀이 (0) | 2023.08.16 |
짝지어 제거하기 (0) | 2023.08.14 |
코딩테스트 기록을 블로그에 남기려고 합니다. (0) | 2023.08.14 |
목차
코딩테스트 기록을 블로그에 남기려고 합니다.
원래는 코딩테스트 준비를 하며 문제 푼 내용을 노션에 개인적으로 기록하고 있었습니다.
동료의 추천으로 블로그에 기록을 남기려고 합니다.
다만 기존과 동일하게 모든 문제 풀이 기록을 남기려고 하지는 않으며 문제 풀었을 때, 새로운 메서드의 발견이라든가 다른 사람의 풀이에서 배운 점이 있을 때만 기록을 남기려고 합니다.
그 동안 노션에 정리한 내용은 아래 사이트를 남겨두고 이제 노션 기록은 중지하려고 합니다.
https://www.notion.so/830c89f1eff3488d94417c60ec7f9516?v=8a7477b78e41488fa9896237025fa64a
'알고리즘 > 코딩테스트 준비' 카테고리의 다른 글
마지막 두 원소 - 쉬운 문제라도 읽기 편한 코딩을 하자 (0) | 2023.08.21 |
---|---|
공백으로 구분하기2 - 문자열 문제는 쓰는 기능만 쓰게 되는 것 같다. trim과 정규화의 활용성 (0) | 2023.08.17 |
카펫 - 수학적으로 풀었다고 생각한 풀이와 진짜 수학적 풀이 (0) | 2023.08.16 |
짝지어 제거하기 (0) | 2023.08.14 |
다음 큰 숫자 - Integer.bitCount()의 발견 (0) | 2023.08.14 |
목차
개요
AWS EC2와 AWS RDS 서버에서 서버 시간이 한국 시간이 아니어서 게시글을 작성하는데 우리가 원하는 한국 시간이 아닌 UTC로 나와 문제가 생겨 해결해본 경험을 공유해보고자합니다.
AWS EC2 서버 시간 변경하기
AWS EC2 서버 시간을 변경하는 것은 우분투 시간 변경 명령어를 사용하기만 하면되어서 간단했습니다.
sudo timedatectl set-timezone Asia/Seoul
AWS RDS 서버 시간 변경하기
AWS RDS 서버 시간 변경하는 것은 과정이 조금 복잡했습니다.
아래의 과정을 따라주시면 됩니다.
먼저 AWS 웹페이지에서 RDS 메뉴로 이동해 [파라미터 그룹]을 선택합니다.
[파라미터 그룹] 선택 후 나온 파라미터 그룹 화면에서 [파라미터 그룹 생성]을 클릭합니다.
(myparametergroup은 제가 미리 생성해둔 파라미터 그룹입니다.)
[파라미터 그룹 생성] 클릭 후 나온 화면에서 우선 [파라미터 그룹 패밀리]를 선택합니다.
저 같은 경우에는 mysql8.0을 사용하고 있어서 mysql8.0을 선택했습니다.
이후 원하시는 그룹 이름과 설명으로 파라미터 그룹 생성을 해줍니다.
[생성] 버튼을 누르시면 맨처음 보셨던 화면과 같이 그룹이 생성되었음을 확인하실 수 있습니다.
생성한 파라미터 그룹을 클릭해 수정하면 됩니다.
생성하신 그룹에 들어가신 후 [편집] 버튼을 클릭해줍니다.
[편집] 버튼을 클릭하여 나타난 화면에서 time_zone을 검색하시고 값을 Asia/Seoul을 작성해주신 후 [Save Changes] 버튼을 클릭해주시면 됩니다.
변경이 완료되셨으면 시간 변경을 원하는 RDS 인스턴스를 수정해주어야합니다.
수정을 원하시는 RDS 인스턴스에 들어가신 후 [수정] 버튼을 클릭합니다.
[수정] 버튼을 클릭한 후 나타난 화면에서 하단에 있는 [추가 구성] 탭 까지 이동하면 DB 파라미터 그룹을 선택하실 수 있습니다.
여기서 앞서 생성하신 파라미터 그룹을 등록하시면 됩니다.
마지막으로 해당 RDS 인스턴스를 재부팅 해주면 모두 완료됩니다.
참고 블로그
https://programforlife.tistory.com/52
'코드스테이츠 > 메인프로젝트(MuDuck) 이슈정리' 카테고리의 다른 글
Lombok @Builder 사용 시 기본값을 지정해줘야한다면 @Builder.Default를 사용하자 (0) | 2023.07.28 |
---|---|
gradlew test -i 를 사용해 테스트코드 오류를 찾자 (0) | 2023.07.28 |
스프링에서 같은 엔드포인트에 쿼리 파라미터가 다른 컨트롤러 메서드 구성하기 (0) | 2023.07.28 |
Null 값에 비교연산자를 사용해야한다면 == 을 사용해야한다. (0) | 2023.07.27 |
LocalDateTime 시간 출력 형식에 따라 변환하기 (0) | 2023.07.27 |
Lombok @Builder 사용 시 기본값을 지정해줘야한다면 @Builder.Default를 사용하자
목차
개요
프로젝트 중 엔티티 클래스에 대해 Builder 패턴을 적용하는 경우가 있었는데 이 때, 기본값으로 반드시 지정되어야하는 경우가 있었습니다. 제 경우를 예시로 들자면 게시글을 생성하면 게시글 상태가 기본적으로 "게시글 등록" 상태로 설정해주어야하는 상황이었습니다. 이런 상황을 해결할 수 있는 방법에 대해 공유하고자 합니다.
@Builder.Default를 사용하자
@Builder.Default를 사용해서 해당 경우를 해결 할 수 있습니다.
제가 사용한 코드를 예시로 보시죠.
코드에서 볼 수 있듯이 게시글 상태를 지정하는 변수인 boardStatus에 @Builder.Default 애노테이션이 붙은 것을 보실 수 있습니다. 이 상태에서 BoardStatus.BOARD_POST(게시글 등록 상태)를 지정해주면 게시글 엔티티는 빌더로 생성할 때 boardStatus를 지정하지 않아도 게시글 등록 상태가 기본적으로 적용됩니다.
참고 블로그
'코드스테이츠 > 메인프로젝트(MuDuck) 이슈정리' 카테고리의 다른 글
AWS 서버 한국 시간으로 변경하는 것을 까먹지 말자 (0) | 2023.07.28 |
---|---|
gradlew test -i 를 사용해 테스트코드 오류를 찾자 (0) | 2023.07.28 |
스프링에서 같은 엔드포인트에 쿼리 파라미터가 다른 컨트롤러 메서드 구성하기 (0) | 2023.07.28 |
Null 값에 비교연산자를 사용해야한다면 == 을 사용해야한다. (0) | 2023.07.27 |
LocalDateTime 시간 출력 형식에 따라 변환하기 (0) | 2023.07.27 |
목차
빌드 때 테스트코드에 오류 생긴 부분을 못찾고 있었는데 gradlew test -i로 모든 로그를 띄우게 하니 에러의 원인을 찾을 수 있었습니다.
혹시 테스트코드 오류가 났는데 현재있는 로그로만 해결법을 못찾겠다면 해당 명령어를 사용해보면 좋을 것 같습니다.
참고블로그
'코드스테이츠 > 메인프로젝트(MuDuck) 이슈정리' 카테고리의 다른 글
AWS 서버 한국 시간으로 변경하는 것을 까먹지 말자 (0) | 2023.07.28 |
---|---|
Lombok @Builder 사용 시 기본값을 지정해줘야한다면 @Builder.Default를 사용하자 (0) | 2023.07.28 |
스프링에서 같은 엔드포인트에 쿼리 파라미터가 다른 컨트롤러 메서드 구성하기 (0) | 2023.07.28 |
Null 값에 비교연산자를 사용해야한다면 == 을 사용해야한다. (0) | 2023.07.27 |
LocalDateTime 시간 출력 형식에 따라 변환하기 (0) | 2023.07.27 |
목차
개요
프로젝트 중에 게시글 목록을 반환하는 API를 만드는 중 3개의 쿼리 파라미터에 따라 전달하는 데이터가 다른 경우가 발생했습니다. 3개의 쿼리 파라미터는 페이지 정보, 정렬 기준, 카테고리 였는데요. 이 3가지를 모두 선택하는 경우, 이 중 2가지만 선택하는 경우, 이중 하나만 선택하는 경우 혹은 하나도 선택하지 않은 경우 모두를 컨트롤러 메서드로 만들기에는 비효율적이라 생각했습니다. 이런 경우 한 가지 메서드로 모든 것을 처리할 수 있는 방법에 대해 소개해드리려고 합니다.
@RequestParam을 사용하자
@RequestParam을 사용하여 세 가지 쿼리 파라미터를 모두 한 메서드 내에서 정의가 가능합니다.
아래 예시를 보시죠.
페이지 정보, 정렬 기준, 카테고리 쿼리 파라미터가 모두 한 컨트롤러 메서드의 인자로 들어가있는 것을 보실 수 있습니다.
@RequestParam의 속성 required에 false 값을 주면 필수값이 아니므로 해당 파라미터는 값이 없어도 됩니다. 다만 제 상황과 같이 값이 주어지지 않을 때에도 기본적으로 적용되어야하는 값들이 있을 수 있습니다.
위 상황에서는 page 파라미터가 쿼리 파라미터에 없어도 1페이지에 대한 값인 것을 나타낼 수 있어야한다는 점입니다.
그런 상황에서는 @RequestParam 속성 defaultValue에 값을 지정해주시면 됩니다.
참고 블로그
'코드스테이츠 > 메인프로젝트(MuDuck) 이슈정리' 카테고리의 다른 글
AWS 서버 한국 시간으로 변경하는 것을 까먹지 말자 (0) | 2023.07.28 |
---|---|
Lombok @Builder 사용 시 기본값을 지정해줘야한다면 @Builder.Default를 사용하자 (0) | 2023.07.28 |
gradlew test -i 를 사용해 테스트코드 오류를 찾자 (0) | 2023.07.28 |
Null 값에 비교연산자를 사용해야한다면 == 을 사용해야한다. (0) | 2023.07.27 |
LocalDateTime 시간 출력 형식에 따라 변환하기 (0) | 2023.07.27 |
목차
개요
코딩테스트를 준비하던 중 효율성 문제 때문에 HashMap을 사용해야했던 문제가 있었습니다.
풀던 중 갑자기 왜 HashMap을 사용하면 시간이 빨라질까 궁금하여 공부하게 되었습니다.
결론
결론부터 말씀드리자면 HashMap의 값을 넣는 put 메서드와 값을 가져오는 get 메서드의 시간복잡도가 O(1)이기 때문입니다. 그러면 왜 시간복잡도가 O(1)인지 파악해보도록 하겠습니다.
해시(Hash)란?
해시란 해시 함수(Hash Function)에 의해 얻어지는 값을 뜻합니다. (해시 값, 해시 코드, 해시 체크섬으로도 불립니다.)
해시 값을 전달해주는 해시 함수에 대해서도 알아보도록 하겠습니다.
해시 함수 또는 해시 알고리즘으로 불리며 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수를 뜻합니다.
이러한 해시 값을 Java의 HashMap에서 어떻게 사용하는지 파악해보고자 합니다.
Java의 HashMap 기본 원리
Java의 HashMap은 Hash Table의 자료구조 형태를 기본하여 작동합니다.
Hash Table이란 key 값을 해시 함수에 통과시킨 후, 해당 값을 인덱스로 사용한 배열에 값을 저장하는 자료구조입니다.
이러한 Hash Table을 바탕으로 동작하기에 값을 저장하기 위해 <Key, Value> 쌍을 전달하면 Key 값이 hash function을 통과하여 인덱스화 되고 배열의 해당 인덱스 위치에 Value가 저장되는 것입니다.
또한 값을 찾기 위해 Key값을 전달하면 hash function을 거쳐 인덱스를 얻은 후 값이 저장된 배열의 해당 인덱스 위치에 값을 얻어오면 되기 때문에 빠른 것입니다.
Java라는 Key 값에 Spring이라는 Value를 가지도록 HashMap에 저장하는 예시를 아래에 들어보겠습니다.
지금까지 <Key, Value> 쌍으로 이루어진 값을 Key를 인덱스화 시켜서 값을 넣고 조회하는게 빠르다는 것을 확인했습니다.
하지만 만약 새로운 <Key, Value> 쌍을 저장하려는데 새로운 Key 값의 해시 값에 이전에 저장했던 값이 있다면 어떻게 해야할까요.
해시 충돌(Hash Collision)
앞서 소개드렸던 것과 같은 이슈를 해시 충돌이라고 합니다.
해시 함수가 입력 값의 길이가 어떻든 고정된 길이의 값을 출력하기 때문에 입력값이 다르더라도 같은 결과값이 나오는 경우가 있습니다. 그렇기 때문에 해시 충돌이 발생하는 것입니다.
(그래서 해시 충돌이 적을수록 좋은 해시 함수라고 불립니다.)
해시 충돌 회피 방법
해시 충돌이 일어나도 <Key, Value> 쌍을 안정적으로 저장하고 조회할 수 있도록 하는 방법이 두 가지가 있습니다.
1. Open Addressing
Open Addressing 방식은 해시 충돌이 발생하면 비어있는 다른 공간에 해당 자료를 삽입하는 방식입니다.
(위 그림을 예시로 들면 새로운 Key값의 해시 값이 2라서 충돌이 발생하면 3번 자리가 비어있는지 확인하고 비어있으니까 3번 자리에 값을 넣는 방식입니다.)
2. Seperate Chaining
Seperate Chaining 방식은 해시 충돌이 발생하면 해당 버킷값을 첫 부분으로 하는 LinkedList를 만들어 해결하는 방식입니다.
이 중 Java는 Seperate Chaining 방식을 사용하는데 조금 더 향상된 방법을 사용합니다.
Java의 해시 충돌 회피 방법
Java에서는 해시 충돌 회피 방법으로 앞서 말씀드렸듯이 Seperate Chaining 방식을 사용하는데요. 조금 더 향상된 방법을 사용한다고 말씀드렸습니다.
조금 더 향상된 방법이란 바로 Linked List가 아니라 Tree도 사용한다는 점입니다.
Tree를 사용하게 되면 해당 인덱스에 많은 값들이 들어가게 되었을 때, Linked List보다 조회에 있어 더 높은 효율을 보이게 됩니다.
Java의 향상된 방식을 소개드릴 때 Tree도 사용한다고 말씀드렸는데요.
그 이유는 Linked List와 Tree를 함께 사용하기 때문입니다.
위 사진과 같이 TREEIFY라는 용어를 토대로 충돌이 일어난 인덱스에 값이 8개가 모이면 Linked List를 Tree로 변경하고 6개로 바뀌면 다시 Tree를 Linked List로 변경시킵니다.
이 때, 7개에 대한 기준이 없는 것을 보실 수 있는데요. 이는 잦은 Linked List와 Tree로의 변경으로 인한 성능저하를 막기 위함이라고 합니다.
정리
이렇듯 Java의 HashMap에 대한 동작 원리를 간단하게 살펴보았습니다.
사실 제가 다룬 내용은 HashMap 동작 원리의 개략적인 부분입니다.
혹시 더 많은 부분을 공부해보고 싶으신 분들께서는 아래 참조 블로그 중 네이버 d2의 글을 참고해주시기를 바랍니다.
참고 블로그
https://creampuffy.tistory.com/124
'Java' 카테고리의 다른 글
Arrays.asList() 사용 시 주의할 점 (0) | 2025.04.03 |
---|---|
List에서 특정 조건 만족하는 요소 삭제하기 (List.removeIf 사용하기) (0) | 2025.01.17 |
상속관계의 클래스 일 때, @Builder 사용하기 (0) | 2024.11.16 |
ObjectMapper, Pattern 등의 클래스를 싱글톤으로 사용해도 될지 고민했던 내역 (0) | 2024.11.15 |
인텔리제이에서 자바 버전 변경하기 (0) | 2023.10.17 |