[백준] 1022 소용돌이 이쁘게 출력하기(JAVA)
·
코딩테스트/백준(Beakjoon)
문제 분석크기가 무한대인 정사각형 모눈종이에 소용돌이 모양의 반시계 방향으로 양의 정수를 채움제시된 범위에 맞는 소용돌이 이쁘게 출력하기 의사 결정처음에는 이중 배열을 구현하여 값을 채워넣고, 제시한 범위만 잘라서 출력하도록 했지만 메모리 초과로 실패했습니다.-5 000 ≤ r1, c1, r2, c2 ≤ 5,000 으로 좌표 값이 크게 설정되면 이중 배열이 너무 커지기 때문에 메모리 초과가 발생한 것으로 추측됩니다.각 좌표의 값을 소용돌이 규칙에 따라 계산하고, 제시된 이중 배열 범위에 추가하여 출력하는 방식을 사용했습니다. 코드 구현1. 각 좌표 (R1, C1, R2, C2) 입력공백을 기준으로 split으로 잘라 각 자표를 변수에 저장했습니다. BufferedReader br = new Buffer..
[백준] 2579 계단 오르기 (JAVA) 풀이 - DP
·
코딩테스트/백준(Beakjoon)
https://www.acmicpc.net/problem/2579재귀 함수를 사용해 풀수도 있지만, 동적 계획법(DP)를 사용해 풀었습니다.풀이방법1. 점화식의 형태와 의미는 DP[N] = N개의 계단에서 최대 점수로 도출하였습니다.최대값을 찾는 문제이기 때문에 핵심 점화식에서는 Math.max 함수가 있다는 것을 알 수 있습니다. 이를 토대로 계단이 1개 ~ 5개일 경우, 하드 코딩으로 작성해봅니다.DP[1] = step[1]DP[2] = step[1] + step[2]DP[3] = step[1] + step[3]          = step[2] + step[3] 이므로 max(step[1]+step[3] , step[2] + step[3]) 이다.DP[4] = step[1] + step[2] + s..
[백준] 1074 Z (JAVA) 풀이
·
코딩테스트/백준(Beakjoon)
https://www.acmicpc.net/problem/1074분할 정복, 재귀 함수를 사용한 문제이다.우선, Z가 지나온 방향으로 분석을 해보고자 했고, 대략적인 패턴은 발견했지만 이를 어떻게 구현해야 할지 감이 잡히지 않았습니다. 가장 아래 걸어둔 링크를 통해 해당 문제 패턴을 파악하였습니다.  풀이 방법1. 배열을 사분면으로 나누고, 입력 받은 r, c가 몇 번째 사분면에 속하는지 확인합니다.2. 재귀를 호출할 때마다 현재 r,c의 위치에 따라 앞 사분면에서 몇 번 방문했는지 더 하는 변수 count를 선언 합니다.3. find 메소드를 정의하고, 매개변수로 한 변의 사이즈 size와 타겟 위치 인덱스 r, c를 넘깁니다. 3-1. r과 c가 1사분면에 속한다면, 아무 곳도 방문하지 않았기 때문에..
[JPA] 즉시 로딩(EAGER) vs 지연 로딩(LAZY)
·
Java
Fetch Type이란?JPA가 하나의 Entity를 조회할 때, 연관 관계에 있는 객체들을 언제, 어떻게 가져올 것인지를 결정하는 설정값 입니다.연관 관계에 있는 모든 Entity를 가져온다 -> EAGER연관 관계에 있는 Entity를 가져오지 않고, getter로 필요한 시점에 접근하여 가져온다 -> LAZYfetch의 default 값은 @xxToOne에서는 EAGER, @xxToMany에서는 LAZY입니다. 즉시로딩(Eager)연관 관계에 있는 모든 엔티티를 즉시 가져오는 방식 입니다. xxToxx(fetch = fetchType.EAGER)다음과 같이 Food 엔티티와 User 엔티티가 N:1 매핑으로 관계를 맺고 있습니다. User의 PK가 Foreign Key로 실제 Food DB 컬럼에 ..
[백준] 14891 톱니바퀴 (JAVA) 풀이
·
코딩테스트/백준(Beakjoon)
https://www.acmicpc.net/problem/14891시뮬레이션 문제 이다.풀이 방법1. 톱니바퀴의 극을 입력 받는다. 문자로 입력 받으면 아스키 코드로 출력되기 때문에 (int) input.charAt()-48를 사용하여 정수로 변환한다.2. 특정 톱니바퀴(3번)의 우측 톱니바퀴(4번) 회전 정보를 확인한다. 극이 다르면 현재 톱니바퀴 방향의 반대 방향으로 설정한다. 우측과 마찬가지로 좌측 톱니바퀴(2번, 1번) 회정 정보를 확인한다. 좌측 톱니바퀴는 2개이기 때문에 회전 전파가 이루어져야 한다.3. 회전 정보에 맞춰서 톱니바퀴를 방향에 맞춰 회전 시킨다.4. 각 톱니바퀴에 맞는 점수를 계산하여 출력한다. 정답 코드import java.io.BufferedReader;import java...
[JUnit] @ParameterizedTest, @MethodSource으로 한번에 테스트하자
·
Java
IntroductionREST API 개발 공부를 하면서 TDD 사용하는 방식이 궁금하여 요즘 인프런의 백기선님 강의로 학습하고 있다. 해당 강의에서는 JUnit4를 사용하고 있고, 본인은 JUnit5로 학습하고 있다. 매개변수를 사용하는 테스트 코드를 작성하던 중 버전별로 지원하는 방식이 다르다는 것을 알게되었고, @ParameterizedTest로 사용하는 방식이 유용하고 편리하여 사용방법에 대해 정리하고자 한다. 먼저, 아래의 user 클래스는 비밀번호 유효성검사를 간단하게 확인하는 메소드이다. 이 메소드를 사용하여 테스트 코드에서는 비밀번호가 유효한지 확인할 것이다.@Builder@Getter@Setter@EqualsAndHashCode(of = "id")@AllArgsConstructor@NoA..
[백준] 1713 후보 추천하기 (JAVA) 풀이
·
코딩테스트/백준(Beakjoon)
https://www.acmicpc.net/problem/1713시뮬레이션 문제 이다.풀이 방법1. 추천 받는 학생의 목록을 입력 받는다.2. 이미 사진틀에 있는 학생을 추천하면 추천 횟수만 추가한다.3. 사진틀이 가득 찼을 경우에는 추천 횟수가 가장 작은 학생을 찾는다. 이렇게 찾는 학생을 사진틀에서 삭제하고, 추천 횟수를 0으로 초기화한다.4. 학생을 추가하고, 해당 학생의 추천 횟수를 추가한다.5. 이렇게 정리된 사진틀의 학생를 오름차순으로 정렬하고, 출력한다.  정답코드import java.util.*;import java.io.*;public class Main{ public static void main(String[] args) throws Exception { Buffer..
[Spring] Entity vs DTO vs VO
·
Spring
Introduction새롭게 공부를 시작하면서 Entity, DTO, VO의 대한 명확한 역할이 궁금해졌다. 새로운 개념들을 정확하게 이해하고 설명하기 위해 이번 포스팅에서는 이것들이 무엇이고, 언제 사용하며, 또 차이점은 무엇인지 정리하려고 한다. 먼저 Entity와 DTO, VO를 복잡하게 나누는 이유가 무엇일지 고민해보자. 그 이유는 소프트웨어를 설계하면서 명확한 역할을 분담하고, 유지보수성과 확장성을 높이기 위해서이다. 이를 구분함으로써 복잡한 시스템을 안정적으로 유지할 수 있다. 1. DTO란?DTO(Data Transfer Object)는 데이터 전송 객체라는 의미를 가지고 있다.계층간 데이터 교환을 위한 객체(java beans)이며, 데이터를 담아서 전달하는 바구니라고 생각하면 된다. DB..
[백준] 5212 지구온난화 (JAVA) 풀이
·
코딩테스트/백준(Beakjoon)
https://www.acmicpc.net/problem/5212시뮬레이션 문제 이다.풀이 방법1. 지도를 입력 받는다.2. 입력 받으면서 육지일 경우 stack에 해당 위치를 추가한다.3. 바다가 될 경우의 조건은 인접한 곳(상하좌우)가 바다이고 3칸이상 일 때 이다. 비교할 때 상하좌우 칸이 지도를 넘어가는 경우에도 바다이기에 갯수를 센다.4. 바다가 될 수 있는 땅이 3칸 미만일 경우, 유효한 땅이므로 최대/최소 경계를 갱신한다.5. 지도에 'S'인 경우에는 가라앉을 땅이기에 바다로 출력하고, 나머지는 map에 저장되어 있는 대로 출력하며 새로운 지도를 그린다.  정답 코드import java.util.*;import java.io.*;public class Main { public static v..
[Java] Enum 뿌리부터 시작하여 개념 이해하기
·
Java
Introduction개발 공부를 하면서 enum을 자주 사용하는 것을 보았다. enum이 편리하고 유용하다는 것은 알겠는데, 특징이나 사용법을 공부해도 왜 enum을 사용하는지 잘 이해되지 않았다.  어떤 이유로 enum을 사용하고, 언제 사용하는 걸까? 에 대한 의문이 풀리지 않았다.  그런데 enum의 뿌리를 탐구하다 보니, 이해가 되기 시작했다. enum이 등장하기 전에는 상수를 어떻게 정의했는지,  enum을 사용하면 어떤 점이 더 편리한지를 정리하려고 한다.Enum이란? 미리 정의된 상수들의 특별한 집합이다. enum은 enumeration 혹은 enumerate type의 줄임말로 계산, 열거라는 영어단어의 앞부분만 따서 만든 예약어이다. 먼저 Enum은 프로그래밍을 하다보면 배열이나, 리스..
BE_ranny
조금씩 천천히_개발일지