분류 전체보기 319

백준 1027번 : 고층건물 자바

🧫 문제 분석 ✔️ 출처고층건물 골드 4 📖 문제 핵심사실상 수학문제라고 봐도 과언이 아니라 생각한다.기울기의 증감을 따져서 비교하면 되는데  빌딩중 하나를 기준으로 생각해보자. 좌측 부분은 기울기가 증가 하는 형태이고우측 부분은  기울기가 감소하는 형태이다.  대략 이렇게 볼 수 있다.  뒷건물에 대해서는 기울기 최솟값을 저장하고 최솟값보다 기울기가 크다면 그 빌딩은 볼 수 없는 빌딩이다. 앞 건물에 대해서는기울기 최대값을 저장하고최댓값보다 기울기가 작다면 그 빌딩은 볼 수 없는 빌딩이다.  문제에서 A-B 빌딩 선분이 다른 빌딩을 지나거나 접하지 않아야한다 했으므로 기울기가 같으면 그 빌딩은 볼 수 없다.  🔅 문제 풀이import java.io.*;import java.util.StringTo..

백준 1038번 : 감소하는 수 자바

🧫 문제 분석 ✔️ 출처감소하는 수 골드 5 📖 문제  핵심감소하는 수는 완전탐색 + 백트래킹 문제이다. 먼저 문제를 보면 321, 950 같은 수는 감소한다. 즉 각 앞 자리수보다 뒷 자리수가 더 작아야한다. ex)321이면 3보다 작은 수가 와야하고 여기서는 2 가 왔다2보다 작은수 1이 왔다. 수를 생각해보면 0~9 까지 있고 나올 수 있는  감소하는 수 최대 값은9 8 7 6 5 4 3 2 1 0 이다. (98억7654만..)즉 10자리수까지만 탐색하면 된다는 의미이다.  문제에서 주어지는 N번째 수가 무엇인지를 출력하면 된다.예제 1번을 예시로 보자 0~9까지는 각 수에 대한 각 번호이다. 0 은 0번째 , 1은 1번째그리고 10 은 10번째이고 11부터 19까지는 감소하는 수가 아닌 같거나..

백준 1759번 : 암호 만들기 자바

🧫 문제 분석 ✔️ 출처암호 만들기 골드 5 📖 문제  조건최소 한개의 모음 && 두 개 이상의 자음 알파벳이 사전 순서대로 정렬   ex) ba 불가능, ab 가능  알파벳을 배열에 담고 오름차순 정렬한 다음 길이를 주고 각 자리수에 맞게 완전탐색을 해본다. 처음(0일때) a일 경우 a를 방문했다고 하고 나머지 c i t s w 에 대해서 또 DFS를 한다. 중요한 것은 이전 사전 순이기에 이전 알파벳보다 현재 알파벳이 커야한다.(순서로 따지자면 뒷 번호여야 한다.)따라서 이전 알파벳에 대한 인덱스를 매개변수로 넘긴다.   그리고 모음의 만들어야하는 암호의 길이 L - 모음의 개수 = 자음의 개수이다.    🔅 문제 풀이import java.io.BufferedReader;import java.i..

API 학습 내용

api를 엔티티 그대로 반환하면 양방향 매핑시 무한 루프에 빠진다. @Jsonignore 을 사용하는것도 좋은 방법은 아니다. (항상 사용하지 않는것이 아니기에) DTO로 반환하자 💠  DTO로 조회하는 V4 ~ V6✔️ V3컬렉션 패치 조인 + 페이징 @BatchSize // 쿼리 1번 @GetMapping("api/v3.1/orders") public List ordersV3_page(@RequestParam(value = "offset", defaultValue = "0") int offset, @RequestParam(value = "limit", defaultValue = "100") int limit) { ..

Back-End/JPA 2024.07.15

JPA - JPQL

JPA는 SQL을 추상화한 JPQL은 객체 지향 쿼리 언어를 제공JPQL은 테이블이 아닌 엔티티 객체를 대상특정 데이터베이스 SQL에 의존 X즉, 객체 지향 SQL   참고 JPA를 사용하면서 JDBC 직접 사용 Template 등을 사용하게 되면SQL을 실행하기 전에 영속성 컨텍스트를 수동 플러시 하자   ✔️ 문법 select m from Member (as) m where m.age > 18엔티티와 속성은 대소문자 구분 O (Member, age 등)JPQL 키워드는 대소문자 구분 X (SELECT, select 등)엔티티 이름 사용 💠 집합과 정렬select COUNT(m), //회원수 SUM(m.age), //나이 합 AVG(m.age), //평균 나이 MAX(m.age), //최대 나이 MI..

Back-End/JPA 2024.07.12

JPA - 값타입

엔티티 타입@Entity 로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적 가능   값 타입int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고 값만 있으므로 변경시 추적 불가 💠 기본값 타입primitive type, wrapper type생명주기를 엔티티에 의존값타입은 공유 금지  primitive type(기본 타입)은 절대 공유 금지기본 타입은 항상 값을 복사  wrapper 클래스나 String 같은 특수한 클래스는 공유 가능 객체지만 변경 XInteger a = 10;Integer b = a;System.out.println("a = " + a);System.out.println("b = " + b); b = 20;Syste..

Back-End/JPA 2024.07.12

백준 2193번 : 이진수 자바

🧫 문제 분석✔️ 출처이진수 실버 3 📖 문제  내가 이해한 바로는    이런느낌이다.3번째를 만들어준 2번째의 수의 경우와 2번째를 만들어준 1첫째 수의 경우의 합이라는 느낌이다.  🔅 문제 풀이import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.IOException;public class Main { public static long[] dp; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ..

baekjoon/DP 2024.07.10

JPA - 프록시와 연관관계 관리

연관관계를 맺은 Member 와 Team 객체에서Member 만 조회할 때 Member 객체 안에는 Team 객체가 들어가 있을까?만약 그렇다면 Member만 사용하고 싶을 때는 어떻게 해야하나 ?JPA는 프록시 기술을 통해서 이 문제를 해결하였다.  ✔️ 프록시 실제 클래스를 상속받아서 만들어진 가짜  위임프록시 객체는 실제 객체의 참조를 보관 (Entity target 필드 가짐)프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 1. 멤버 프록시 조회Member member = em.getRefernce(Member.class, id);2. member.getName() 호출member.getN..

Back-End/JPA 2024.07.10

JPA - 고급 매핑

✔️ 상속관계 매핑관계형 데이터베이스는 상속 관계 X슈퍼 타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사상속 관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브 타입 관계를 매핑  슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법각각 테이블로 변환 -> 조인 전략통합 테이블로 변환 -> 단일 테이블 전략서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략   ✔️ Join 전략부모 엔티티에 해당 애노테이션 붙이기@Entity@Inheritance(strategy = InheritanceType.JOINED) // 조인 전략@DiscriminatorColumn(name = "DTYPE") // DTYPE 설정 default : DTYPE public class Item { @..

Back-End/JPA 2024.07.09

JPA - 1:N 단방향과 양방향에 대해서

JPA 공부중 이해가 안가서 책을 참고하면서 이해한 것을 적어보려한다 먼저 JPA는 외래키를 관리하며 연관관계 주인만 사용한다.주인이 아닌 Team.members는 조회를 위한 JPQL이나 객체 그래프를 탐색할 때 사용한다. 가정Team : 1(연관관계 주인)Member : N (FK)  1:N 단방향 매핑을 하고 Team이 연관관계 주인이라 했을 때Member는 Team을 모른다.  아래의 코드를 실행해보자.Member member = new Member(); member.setUsername("member1"); Team team = new Team(); team.setName("team1"); member.setTeam(team); team.getMembers().add(member);..

Back-End/JPA 2024.07.09