https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 핵심 이 문제는 DFS를 이용하면 쉽게 풀 수 있다. 또한 알파벳을 이미 방문했는지 판단해야 한다. 정답 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int..
방학 동안 알고리즘 학습에 대해 고민하던 중 좋은 기회가 있어 신청하였다. 그동안 까먹고 있었는데, 오늘 메일이 와서 블로깅을 하게 되었다. 사전 문제는 2문제를 기간내에 푸는 것이었다. 생각보다 쉽지 않아서 놀랐던 기억이 있다. 그래도 집념으로 계속 도전하여 2 솔을 하였다. 게시판을 보니까 2솔을 해도 떨어진 사람들이 있었다. 참여인원이 많아서 내부 기준을 적용했다고 한다. 다행히도 운이 좋아 참여할 수 있게 되었다. 평소 알고리즘을 좋아해서 이번 특강도 재미있게 참여할 수 있을 것 같다.
https://www.acmicpc.net/problem/1520 1520번: 내리막 길 여행을 떠난 세준이는 지도를 하나 구하였다. 이 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 한 칸은 한 지점을 나타내는데 각 칸에는 그 지점의 높이가 쓰여 있으 www.acmicpc.net 핵심 이 문제는 DFS로 풀면 시간초과가 나게 된다. 따라서 DP를 함께 사용한다. 이미 탐색한 부분은 다시 탐색하지 않는 방법을 이용한다. 정답 코드 import java.util.Scanner; public class Main { static int M; static int N; static int[][] map; static int[] dy = {1, 0, -1, 0}; static int[] d..
페치 조인(fetch join) 페치 조인이란 SQL 조인의 종류가 아니며, JPQL에서 성능 최적화를 위해서 제공해주는 기능이다. 페치 조인은 엔티티를 조회할 때 연관된 엔티티나 컬렉션을 한 번의 SQL로 함께 조회하는 기능을 제공함으로써 N+1문제를 해결할 수 있게 도와준다. 일반 조인은 실행 시 연관된 엔티티를 함께 조회하지 않는다. 단지 데이터베이스 상에서 테이블간의 탐색을 위해 사용되는 것이다. 아래와 같은 코드가 있다고 하자. @Entity @Data public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private int age; ..
JPQL(Java Persistence Query Language) JPQL은 SQL을 추상화하여 특정 데이터베이스 SQL에 의존적이지 않은 객체지향 쿼리 언어이다. 테이블을 대상으로 쿼리를 하는 것이 아닌 객체(엔티티)를 대상으로 쿼리를 하기에 객체지향 쿼리 언어라고 불린다. JPQL은 결국 SQL로 변환되어 데이터베이스에 전달된다. ex) select m from Member as m where m.age > 20 엔티티와 속성은 대소문자를 구분한다. (Member, age) JPQL 키워드는 대소문자를 구분하지 않는다. (SELECT, select 모두 가능) 테이블이 아닌 엔티티의 이름을 사용한다. (Member) 별칭은 필수다. (m) (as는 생략 가능) EXISTS, IN, AND, OR, ..
JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 ex) 멤버 엔티티의 나이, 번호 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 ex) 숫자 10을 30으로 변경하면 완전히 다른 값으로 대체 갑 타입 분류 기본값 타입 - 자바 기본 타입, 래퍼 클래스, String 임베디드 타입 컬렉션 값 타입 기본값 타입 생명주기를 엔티티의 의존한다. 값 타입은 공유하면 안된다. 기본 타입은 항상 값을 복사한다. 값을 공유 X 임베디드 타입(복합 값 타입) 새로운 값 타입을 직접 정의할 수 있음 JPA는 임베디드 타입이라 ..
https://school.programmers.co.kr/learn/courses/30/lessons/136798 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해당 문제의 핵심은 약수의 개수를 찾는 것이다. 하지만 단순하게 시간복잡도 때문에 단순하게 약수를 찾으면 시간초과가 떠버린다. 1. 단순하게 모든 수를 나눠서 약수 구하기 List getDivisor(int N){ List divisors = new ArrayList(); for (int i = 1; i
프록시란? Proxy, 영어로 '대리인'이라는 뜻이 있다. 말 그대로 엔티티에 대한 대리인의 역할을 한다. 그 말대로, 프록시는 원본 객체가 아닌 원본에 대한 복제품을 가져오는 것이다. 다음과 같은 테이블이 있다고 하자. 만약 회원을 조회할 때, 팀도 함께 조회될까? 멤버 엔티티는 아래와 같은 값을 가지며, setter, getter를 포함한다고 하자. @Entity public class Member{ @Id @GeneratedValue @Column(name = "member_id") private Long id; @Column(name = "username") private String name; @ManyToOne private Team team; } 팀 엔티티는 아래와 같은 값을 가지며, set..
엔티티 매핑 객체와 테이블 매핑 @Entity, @Table 필드와 컬럼 매핑 @Column 기본 키 매핑 @Id 연관관계 매핑 @ManyToOne, @JoinColumn @Entity Entity가 붙은 클래스는 JPA가 관리, 엔티티라 함 JPA를 사용해서 테이블과 매필할 클래스는 @Entity 필수 기본 생성자 필수 final 클래스, enum, interface, inner클래스 사용 x 데이터베이스 스키마 자동 생성 DDL을 애플리케이션 실행 시점에 자동 생성 테이블중심 -> 객체 중심 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성 생성된 DDL은 개발 장비에서만 사용 생성된 DDL은 운영서버에서는 사용 X, 다듬어서 사용 기본 키 매핑 방법 직접 할당: @Id만 사용 자동..
영속성 콘텍스트 "엔티티를 영구 저장하는 환경"이라는 뜻 영속성 콘텍스트는 논리적인 개념이다. 눈에 보이지 않는다. 엔티티 매니저를 통해서 영속성 콘텍스트에 접근한다. 엔티티의 생명주기 비영속(new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속(managed) 영속성 컨텍스트에 관리 되는 상태 준영속(detached) 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제(removed) 삭제된 상태 //객체를 생성한 상태(비영속) Member member = new Member(); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); //객체를 저장한 상태(영속) em.persist(member); ..