본문 바로가기

전체 글

(13)
얕은 복사(Shallow Copy), 깊은 복사(Deep Copy) 얕은 복사(Shallow Copy) 란? 얕은 복사(Shallow Copy)는 객체의 복사본을 생성하지만, 원본 객체 내부의 있는 요소들은 참조(reference)로 공유하는 것을 의미합니다. 즉, 새로운 객체를 생성하지만, 원본 객체와 내부 요소들은 같은 메모리 주소를 참조하게 됩니다. 따라서, 얕은 복사를 통해 생성된 객체나 원본 객체의 요소를 수정하면, 두 객체 모두 영향을 받게 됩니다. 예제 코드 Shallow Class public class Shallow { private String name; private int age; public Shallow(String name, int age) { this.name = name; this.age = age; } public String getNam..
프로그래머스(자바, Java) - Level2. 2개 이하로 다른 비트 https://school.programmers.co.kr/learn/courses/30/lessons/77885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제리뷰 및 주요 포인트 입력받는 수의 범위는 0 ≤ numbers의 모든 수 ≤ 1015 이다. 숫자 n을 입력받았을 때, 숫자에 1씩 더하고 자리 수를 맞춰주고 한 자리씩 추출해서 비교하도록 반복문을 사용했었다. 틀린 코드는 아니지만 시간초과가 발생했다. '질문하기'에서 시간초과에 대한 힌트를 얻고자 둘러보다 짝수는 2진수 변환 시 가장 끝자리 수가 항상 0 이기 때문에 +1을 하면 답이라는 ..
[JPA] EntityGraph를 더 잘 써보자 EntityGraph를 이용해서 쿼리를 조금이라도 더 줄여보자 Reservation Entity @Entity @Getter @NoArgsConstructor public class Reservation extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) private Product product; private String uniqueId; @ManyToOne(fetch = FetchType.LAZY) private Member member; private String phoneNumber; private LocalDateTime checkIn; private LocalDateTime checkOut; private String status; privat..
[JPA] @OneToOne 관계에서 EntityGraph 사용하기 JPA에서 OneToOne 맵핑 시 기본 Fetch Type은 Eager입니다. Eager는 연관관계가 있는 필드를 함께 조회합니다. 하지만 이러한 동작은 원치 않을 때도 실행되기 때문에 흔히 말하는 N+1 문제를 발생시킵니다. 정확하게 말하자면 FetchType을 LAZY로 설정하여도 테이블을 조회할 때 외래 키를 갖고 있는 테이블(연관 관계의 주인)에서는 지연로딩이 동작하지만, mappedBy로 연결된 반대편 테이블은 Eager로 동작하기 때문에 지연로딩이 동작하지 않고 N + 1 쿼리가 발생합니다. N+1 문제란? 연관 관계에서 발생하는 이슈로 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 개수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 된다. 이를 N+1 문제라..
프로그래머스(자바, Java) - Level2. 할인행사 https://school.programmers.co.kr/learn/courses/30/lessons/131127 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 주요 포인트 및 문제 리뷰 문제자체가 크게 어렵지 않았지만 완료한 사람도 적은 것을 보아하니 올라온 지 얼마 안 된 문제 같다. 회원자격은 항상 10일까지 유효하기 때문에 최대 행사 종료 10일 전까지 확인하면 된다. 할인하는 제품은 하루 하나씩만 구매할 수 있다. 원하는 제품을 모두 구매할 수 없을 수도 있다. 소스코드 원하는 제품과 그 개수를 관리하는 wantMap을 refresh라는 met..
동적계획법(DP, Dynamic Programming) 동적계획법(DP, Dynamic Programming) 이란? 동적 계획법(動的計劃法, dynamic programming)이란 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법을 말한다. 각 하위 문제의 해결을 계산한 뒤, 그 해결책을 저장하여 후에 같은 하위 문제가 나왔을 경우 그것을 간단하게 해결할 수 있다. 저장 공간이 계속 필요한 대신 시간복잡도는 O(n)을 가진다. (출처 : 위키백과) 접근 f(a, b) = f(a-1, b) + f(a, b-1) (a, b >= 1 ) f(0,0) = 1, 임의의 자연수 n에 대해 f(n,0) = f(0, n) = 1 위와 같이 정의된 함수에서 주어진 임의의 a,b에 대해 f(a, b)의 값을 효율적으로 구하고자 할 때 동적 계획법을 적용시킬 수 있다..
프로그래머스(자바, Java) - Level2. 스킬트리 https://school.programmers.co.kr/learn/courses/30/lessons/49993 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 주요 포인트 및 문제 리뷰 처음에 문제를 풀 때 skill_trees 문자열에서 필수 스킬에 해당하는 문자들의 인덱스를 찾아서 오름차순 비교할 경우 기존이랑 동일한지 확인하는 구조로 처리를 했었다. 하지만 채점이 틀렸기 때문에 다시 생각할 필요가 있었다. 구조를 다시 생각해보니 skill에 포함하지 않은 문자들은 필요하지 않는 정보이기 때문에 없어도 됐었다. replaceAll 메서드에 정규표현식..
프로그래머스(자바, Java) - Level2. 귤 고르기 https://school.programmers.co.kr/learn/courses/30/lessons/138476 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 주요 포인트 및 문제 리뷰 n이라는 숫자가 m번 나오는 구조는 map을 사용하면 쉽게 만들 수 있었다. 문제의 요구 조건을 해결하기 위해 map의 value값이 큰 순서대로 k에서 값을 빼줘야 한다. 이때 내림차순 정렬을 하기 위해 Comparator라는 인터페이스 안에 compare 메서드를 람다식으로 사용한다. 원하는 조건을 설정하고 대소 비교를 통해 해당하는 숫자가 왼쪽으로(내림차순) 또는..