분류 전체보기(250)
-
백준 7576: 토마토
문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 토마토들이 며칠이 지나면 다 익게 되는지, 그 최소 일수를 알고 싶어 한다. 토마토를 창고에 보관하는 격자모양의 상자들..
2022.04.04 -
백준 1449: 수리공 항승
문제 항승이는 품질이 심각하게 나쁜 수도 파이프 회사의 수리공이다. 항승이는 세준 지하철 공사에서 물이 샌다는 소식을 듣고 수리를 하러 갔다. 파이프에서 물이 새는 곳은 신기하게도 가장 왼쪽에서 정수만큼 떨어진 거리만 물이 샌다. 항승이는 길이가 L인 테이프를 무한개 가지고 있다. 항승이는 테이프를 이용해서 물을 막으려고 한다. 항승이는 항상 물을 막을 때, 적어도 그 위치의 좌우 0.5만큼 간격을 줘야 물이 다시는 안 샌다고 생각한다. 물이 새는 곳의 위치와, 항승이가 가지고 있는 테이프의 길이 L이 주어졌을 때, 항승이가 필요한 테이프의 최소 개수를 구하는 프로그램을 작성하시오. 테이프를 자를 수 없고, 테이프를 겹쳐서 붙이는 것도 가능하다. 입력 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 ..
2022.04.04 -
JPQL: fetch join - 컬렉션 페치 조인, 페치 조인 특징과 한계, 페이징
컬렉션 페치 조인(데이터 뻥튀기 조심하라) 일대다 관계를 가정해보자. 현재 팀A에 멤버가 두명 속해있다. 이때 테이블을 조인하면 테이블이 아래와 같아진다. 따라서 DB에서 결과가 두줄이 날라온다... SQL을 아는 사람이라면 DISTINCT 요소로 중복을 제거할 수 있을 것이라는 생각이 들 것이다. 근데 SQL의 DISTINCT는 컬럼의 모든 값이 일치해야 중복으로 처리되어 제거된다. 이 경우 Member의 Id와 Name이 다르다. 하지만 JPQL의 DISTINCT는 추가 기능을 제공한다. SQL에 DISTINCT를 추가할 뿐만 아니라 애플리케이션에서 엔티티 중복을 제거한다. 따라서 JPQL에서는 같은 식별자를 가진 Team 엔티티를 퍼올릴때 중복을 제거한다. 페치 조인과 일반 조인의 차이 "selec..
2022.04.04 -
JPQL: fetch join - 페치 조인, N+1의 문제
들어가기 앞서서 페이조인은.. • SQL 조인 종류가 아니다 • JPQL에서 성능 최적화를 위해 제공하는 기능이다. • 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능이다 • join fetch 명령어로 사용하면 된다 • [ LEFT [OUTER] | INNER ] JOIN FETCH 조인 경로를 지정할 수 있다. 그럼 시작~! 다음과 같은 상황이 있다고 가정하다. 회원과 팀 엔티티가 있는 상황에서, 회원을 조회하면서 연관된 팀도 함께 조회하고 싶다. 회원도 궁금하고 그들의 소속 팀도 함께 보고싶다!!!! 이때 사용하는 것이 페치 조인이다. select m from Member m join fetch m.team select 프로젝션에 m 하나인데, 실제 SQL은 select M.* T.* ..
2022.04.04 -
경로 표현식
용어 정리 • 상태 필드(state field): 단순히 값을 저장하기 위한 필드 (ex: m.username) • 연관 필드(association field): 연관관계를 위한 필드 • 단일 값 연관 필드: @ManyToOne, @OneToOne, 대상이 엔티티(ex: m.team) • 컬렉션 값 연관 필드: @OneToMany, @ManyToMany, 대상이 컬렉션(ex: m.orders) 경로표현식 특징 • 상태 필드(state field): 경로 탐색의 끝, 탐색이 더이상 불가능하다. • 단일 값 연관 경로: 묵시적 내부 조인(inner join) 발생, 탐색이 가능하다. • 컬렉션 값 연관 경로: 묵시적 내부 조인 발생, 탐색이 불가능하다. 컬렉션 값 연관경로는 FROM 절에서 명시적 조인을 통..
2022.04.04 -
@SessionAttribute와 세션정보, 세션 타임아웃 설정
스프링은 세션을 더 편리하게 사용할 수 있도록 @SessionAttribute를 지원한다. 이미 로그인 된 사용자를 찾을 때는 다음과 같이 사용하면 된다. 추가로, required에 false값을 주면 새로운 세션을 생성하지 않는다. @GetMapping("/") public String homeLoginV3Spring( @SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model){ ... } 위의 @SessionAttribute는 아래 3단계 과정을 생략할 수 있게 해준다. @SessionAttribute HttpSession session = request.getSession()..
2022.04.04