전체 글

전체 글

    [BOJ/JAVA] 7562번: 나이트의 이동

    7562번: 나이트의 이동https://www.acmicpc.net/problem/7562키워드나이트가 한 번에 이동할 수 있는 칸은 아래와 같다.이 때 원하는 위치에 가기까지 이동 횟수를 구하라구현final static int dydx[][] 현재 위치 기준으로 나이트가 이동할 수 있는 방향(8방향)을 기록한다. private static int solution()현재 위치에서 나이트가 목적지까지 갈 때 최소 이동 횟수를 반환한다.board[][]모든 위치의 값을 -1로 초기화한다. 현재 위치 기준으로 이동할 위치(toY, toX)를 계산한다.해당 위치가 -1값이 아니라면(방문한 적이 없다면)board[toY][toX] = here.count+1 로 갱신한다. (방문 처리)갈 수 있는 경로를 큐에 추가..

    [BOJ/JAVA] 1068번: 트리

    1068번: 트리https://www.acmicpc.net/problem/1068키워드트리가 주어졌을 때, 노드 하나를 지울 것이다. 그 때, 남은 트리에서 리프 노드의 개수를 구하는 프로그램을 작성하시오. 노드를 지우면 그 노드와 노드의 모든 자손이 트리에서 제거된다.구현private static int solution() 노드를 돌면서 리프 노트의 갯수를 반환하는 메소드방문할 노드를 찾기tree[i] 값은 i노드가 tree[i]값을 부모로 한다는 의미이다.tree[i]는 자식을 가진 노드라는 의미이므로 이 노드는 방문할 필요가 없다.만약 현재 노드가 지워지는 노드라면부모 노드가 리프노드가 될 수 있으므로, 부모 노드 추적을 하지 않는다.boolean isLeafNode[] 에 리프 노드일 수도 있는 ..

    [BOJ/JAVA] 11403번: 경로 찾기

    11403번: 경로 찾기https://www.acmicpc.net/problem/11403키워드가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램구현단순 플로이드-워셜 알고리즘을 이용하여 구현한다. private static void floydWarshall()k를 경유하여 i에서 j로 갈 수 있으면 경로에 추가한다.코드import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class java_11403 { static int N; stati..

    Entity 관련 Annotation

    @Entity해당 클래스가 Entity 임을 명시한다.클래스 자체는 테이블과 일대일로 매칭해당 클래스의 인스턴스는 테이블에서 하나의 레코드를 의미한다.@TableEntity 클래스는 테이블과 매핑되므로 특별한 경우가 아니면 @Table Annotation이 필요가 없다.사용해야 할 때클래스의 이름과 테이블의 이름을 다르게 지정해야 하는 경우위 Annotation을 명시하지 않으면 테이블의 이름과 클래스의 이름이 동일하다는 의미이다.@Id테이블의 기본값 역할로 사용된다.모든 Entity는 @Id Annotation이 필요하다.@GeneratedValue일반적으로 @Id Annotatio과 함께 사용된다.값 생성 방식GeneratedValue를 사용하지 않는 방식(직접 할당)애플리케이션에서 자체적으로 고유한..

    Lombok

    💡데이터(Entity 등) 클래스를 생성할 때 반복적으로 사용하는 getter/setter 같은 메서드를 Annotation으로 대체하는 기능 제공장점Annotation 기반으로 코드를 작성하므로 생산성이 높아짐반복되는 코드를 생략할 수 있어 가독성이 높아짐Lombok을 안다면 코드를 유추할 수 있어 유지보수에 용이 Intellij에 Lombok 설치File→Settings 에 들어간다.File→SettingsPlugins→lombok 검색 후 설치한다.Plugins→lombok 설치File→Settings→Build, Execution, Deployment→Compiler→Annotation Processors 에서 Enable annotation processing을 체크한다.맛보기다음과 같은 클래스..

    JpaRepository getById, findById

    SpringBoot에서 DB 작업을 도와주는 JPA 에서 JpaRepository 라는 interface를 지원해준다. 이 메소드 중 getById, findById의 차이를 살펴보자 getById실제 객체를 반환한다. 다음 코드를 살펴보자public Product selectProduct(Long number) { Product selectedProduct = productRepository.getById(number); return selectedProduct; }number를 Id로 하여 Id기반으로 데이터를 찾아내는 메소드이다. 반환실제로 반환되는 것은 Product 객체이다. 데이터가 없는 경우EntityNotFoundException 예외가 발생한다.findByIdOptional 객체 반환한다..

    [BOJ/JAVA] 5904번: Moo 게임

    5904번: Moo 게임https://www.acmicpc.net/problem/5904키워드S(0)을 길이가 3인 수열 "m o o”1보다 크거나 같은 모든 k에 대해서, S(k)는 S(k-1)과 o가 k+2개인 수열 "m o ... o" 와 S(k-1)을 합쳐서 만들 수 있다.구현정리하면 S(k) = S(k-1) + “m” + “o”*(k+2) + S(k-1) 이다.dp 를 이용하여 적당한 크기의 S(k)까지 각 수열의 길이를 저장하자.dp(int n)n == 0 인 경우moo 이므로 3을 반환moo[n] ≠ -1 인 경우moo[n] 반환moo[n] 계산moo[n] = dp(n - 1) * 2 + (n + 2) + 1moo[n] 반환findMoo(int k, long left)현재 S(k)이고, 앞에..

    [BOJ/JAVA] 16974번: 레벨 햄버거

    16974번: 레벨 햄버거https://www.acmicpc.net/problem/16974키워드레벨-0 버거는 패티만으로 이루어져 있다.레벨-L 버거는 햄버거번, 레벨-(L-1) 버거, 패티, 레벨-(L-1)버거, 햄버거번으로 이루어져 있다. (L ≥ 1)구현모든 버거의 상태를 문자열로 나타낼 수 없다. (메모리를 많이 잡아먹기 때문)각 레벨의 버거마다 버거의 사이즈, 버거에 들어가는 패티의 양을 저장한다.buggers[]patties[]위 두 배열을 dp를 사용하여 값을 저장한다.dp(int level)현재 레벨이 level-버거일 때 버거의 크기를 반환한다.level == 0 인 경우패티만 존재하므로 1 반환이미 계산한 값인 경우계산한 값 반환계산하기버거의 크기는 [번] [(level-1)-버거] ..

    [BOJ/JAVA] 1074번: Z

    1074번: Zhttps://www.acmicpc.net/problem/1074키워드2^N× 2^N인 2차원 배열을 Z모양으로 탐색N > 1인 경우, 배열을 크기가 2^(N-1)× 2^(N-1)로 4등분 한 후에 재귀적으로 순서대로 방문구현move(int y, int x, int n)size = 2^n가장 작은 경우 size가 2^0인 경우좌상단좌상단에 r, c의 범위가 있는 경우1/4 사이즈로 재귀호출한다. 시작 위치는 좌상단이므로 동일move(y, x, n - 1);좌상단에 r, c의 범위가 없는 경우좌상단의 크기만큼 count 증가우상단우상단에 r, c의 범위가 있는 경우1/4 사이즈로 재귀호출한다. 시작 위치는 우상단이므로 x 값만 (size/2)만큼 이동move(y, x + (size / 2),..

    [BOJ/JAVA] 6209번: 제자리 멀리뛰기

    6209번: 제자리 멀리뛰기https://www.acmicpc.net/problem/6209키워드돌섬에서 탈출구 사이에는 총 n개의 작은 돌섬선생님은 이 n개의 작은 돌섬들 중 m개를 제거하여 학생들이 최대한 멀리뛰기 연습의 효율을 높이기 위해서 학생들이 각 돌섬을 점프한 거리의 최솟값을 최대한 크게 하려고 한다.구현매개변수 탐색을 이용하여 구현한다.템플릿low, high 값은 항상 범위 내로 설정한다.low = 1high = 돌섬으로부터 탈출구 까지의 최대 거리(1_000_000_000) 반복문의 속행 조건은 low≤high 이다. long mid = (low + high) / 2;m개를 제거했을 때, 거리가 mid 이상이 되도록 할 수 있는가? mid 길이로 나눠줄 수 있다면low = mid + 1 ..