문제 설명 입력과 출력 및 예제 풀이 코드 이 문제를 풀기 위해서는 두 단계의 BFS를 사용하여 섬을 구분 짓고, 각 섬까지의 거리를 측정하여 최단 거리를 찾는 방법으로 구현하였다. 첫 번째 BFS(각 섬에 번호를 부여): 섬의 개수를 파악하고 각 섬의 영역을 식별하기 위해, BFS 알고리즘을 사용하여 섬에 고유한 번호를 부여한다. 두 번째 BFS(각 섬에서 다리를 놓아 도달 가능한 다른 섬까지의 거리를 측정): 섬의 땅 덩어리에서 다리를 놓기 시작하여, 다른 섬에 도달할 때까지 다리의 길이를 카운트한다. 이 때, BFS를 사용하여 땅 덩어리에서 시작하여 조건에 맞는 이동을 반복하며, 이동 거리를 업데이트한다. 정답 코드 from collections import deque import sys input..
@Query Spring Data JPA를 사용할 때, 개발자가 원하는 쿼리를 직접 짜야 한다면, @Query 어노테이션을 사용하여 직접 쿼리를 작성할 수 있다. @Query 안에서 작성한 JPQL에 오타가 있다면 애플리케이션 실행 시점에 문법 오류를 발견할 수 있다. @Query는 JpaRepository를 상속하는 인터페이스에서 사용할 수 있다. public interface UserRepository extends JpaRepository { @Query("JPQL 쿼리작성") List method(); } 만약 나이가 18살 이상인 유저를 조회하는 쿼리를 작성해보면 다음과 같이 작성할 수 있다. public interface UserRepository extends JpaRepository { @..
JPQL (Java Persistence Query Language)이란 ? JPQL은 엔티티 객체를 대상으로 하는 쿼리 언어이다. JPQL의 문법을 보면 다음과 같다. (나이가 18살 이상인 유저를 조회) select u from User as u where u.age > 18 JPQL은 SQL과 유사한 구문을 사용하는 것을 볼 수 있다. 하지만 살짝 다른 특징을 살펴보면 이렇다. JPQL 문법 특징 엔티티 클래스 이름, 엔티티 필드의 대소문자가 일치해야한다. ( 즉, 유저의 나이를 조회하는데 나이 필드가 age면 Age가 아닌 age로 작성 ) JPQL 키워드는 대소문자 구분하지 않는다. (SELECT, select, From, from) 엔티티 객체를 대상으로 하는 쿼리이므로 엔티티 이름을 사용한다..
문제 설명 입출력 예제 풀이 코드 처음에 육지중에 땅의 크기가 가장 큰 섬를 bfs로 구한다음에 가장 큰 섬에서 또 bfs로 보물 사이의 최단거리를 구해야하나? 라고 생각했다. 하지만 그럴 필요 없이 두 섬에서 보물 사이의 거리가 가장 먼 값을 구하면 된다. 정답 코드 from collections import deque import sys input = sys.stdin.readline r, c = map(int, input().split()) board = [list(input().rstrip()) for _ in range(r)] dx = [1, -1, 0, 0] dy = [0, 0, -1, 1] def bfs(x, y): q = deque() q.append((x, y)) visited = [[-..
임베디드 타입은 엔티티의 일부에 별도의 클래스를 사용하여 구현함으로써, 코드를 더 모듈화하고 재사용성을 높이는 방식이다. 임베디드 타입을 사용함으로써 복잡한 속성 그룹을 분리하고 공통 타입을 다양한 엔티티에서 재사용할 수 있다. 이해하기 쉽게 예시를 통해 알아보자. 임베디드 타입을 사용하는 예시 User 엔티티에 다음과 같은 정보가 있다고 가정해보자. @Entity public class User { @Id @GeneratedValue private Long id; private String username; private String city; private String street; private String zipcode; ... } 여기서 city, street, zipcode는 주소에 해당된다...
어느 책에서나 어느 강의에서나 Entity에서는 Setter를 사용하는 것을 지양한다고 한다. 그렇다면 왜 setter를 지양할까 ? setter를 지양하는 이유 사용한 의도를 쉽게 파악하기 어렵다. Member member = new Member(); member.setUsername("김갑동"); member.setAge(50); 위 코드를 보면 member에 값을 설정하는 것은 알겠는데 이게 값을 생성하는 것인지, 값을 변경하는 것인이 의도를 파악하기 힘들다. 그리고 엔티티의 필드가 더 많을 수록 한눈에 파악하는 것이 힘들어진다. 일관성을 파괴한다. public Member updateMember(Long id) { Member member = findById(id); member.setUserna..