본문 바로가기

전체 글

백준 - 3197 백조의 호수(Java) 구현 문제입니다. 물과 인접한 얼음이 1초마다 없어지는데, 몇 초 후에 두 마리의 백조가 만나는지 구하는 문제입니다. 얼음을 녹이고 백조를 움직이면 입력 범위가 매우 커 시간 초과가 발생했습니다. 때문에 저는 두 가지 방법을 통해 이 문제를 해결했습니다.얼음 두께 구하기한 마리의 백조만 이동 1. 얼음 두께 구하기얼음 두께는 물과의 최대 거리가 됩니다.즉, 얼음 두께만큼 시간이 지나야 해당 얼음이 녹아 물이 됩니다. 이는 네 방향으로 알 수 있습니다.다음과 같은 얼음이 있다고 하겠습니다. 우선 오른쪽 방향으로 얼음의 두께를 확인합니다.물을 0로 두고, 얼음을 1로 둔 상태의 누적 최솟값을 구하는 것과 같습니다.  왼쪽으로 최솟값을 갱신합니다. 아래로 최솟값을 갱신합니다. 위로 최솟값을 갱신합니다. 즉, .. 더보기
@WebMvcTest 옵션으로 특정 클래스 지정하기 @WebMvcTest에 옵션을 지정해서 특정 컨트롤러 클래스만 빈으로 등록해서 가져오는 기능이 있습니다. 아래의 에러를 만나고 나서야 저는 이 기능을 알게 되었습니다. Error creating bean with name 'mailAuthController' defined in file 저에게는 두 개의 컨트롤러가 있습니다. @RestController @RequestMapping("/api/v1/auth") @RequiredArgsConstructor public class MailAuthController { private final SendMailUseCase sendEmailUseCase; } @RestController @RequiredArgsConstructor public class Post.. 더보기
JIT과 AOT 0. 개요 Spring Boot 3.0의 변경점을 알아보던 도중, Spring Native를 공식적으로 지원한다는 것을 알게 되었습니다. Spring Native가 뭔지 몰랐던 저는 공부하게 되었고, 그 내용을 공유하고자 합니다. 우선, Chat GPT에 Spring Native에 대해 물어 보니 아래와 같은 답변을 받았습니다. 요즘 핫한 마이크로서비스(MSA)에 유용하다고 하니 공부를 안할 이유가 없었습니다. 위 내용중 AOT(Ahead-Of-Time) 컴파일러가 네이티브 이미지 생성을하고, 이 것을 통해 초기 실행 속도 향상, 메모리 최적화, 더 적은 종속성을 만들 수 있다고 하니 이 AOT에 대해 궁금해졌습니다. AOT 컴파일러는 JIT 컴파일러와 비교하여 설명할 것이기 때문에 우선 JIT 컴파일러.. 더보기
프로그래머스 - 상담원 인원 (Java) 구현, 그리디 문제입니다. 상담원 인원과 참가자의 상담 요청 정보가 주어졌을 때, 대기시간을 최소로 하는 시간을 구하는 문제입니다. 우리가 해야하는 것은 대기시간을 최소로 하도록 상담원 배치를 하고 나서, 최소 대기 시간을 구해야 합니다. 어떻게 하면 최소 대기 시간을 만들도록 상담원을 배치할 수 있을까요? 문제 조건에 의해 모든 유형에는 상담원이 한 명씩은 배치되어야 합니다. 우선 한 명씩 상담원을 배치하고, 상담원이 추가되었을 때 가장 많이 대기 시간이 줄어드는 타입에 우선적으로 배치하면 됩니다. 가장 많이 대기시간이 줄어들게 되면 전체에서도 최소로 만들어지는 경우이로 만들어지기 때문에 그리디로 접근할 수 있습니다. 문제 접근 순서는 다음과 같습니다. 유형마다 상담 요청 시간 분리 각 유형마다 1~(.. 더보기
백준 - 17825 주사위 윷놀이 (Java) 구현 문제입니다. 문제 조건 자체는 이해하기 어려운 부분은 딱히 없는거 같습니다. 하지만, 이것을 코드로 구현하려니 마땅한 아이디어가 떠오르지 않았습니다. 3~4일간 이 문제만 붙잡고 백준 질문게시판에서 얻은 테스트 케이스를 직접 써보면서 경우의 수를 확인하고, 수많은 디버깅을 한 끝에 맞출 수 있었습니다. 제가 문제를 해결한 방법을 아래 글을 통해 공유하겠습니다. 1. 그래프로 윷놀이 판 구현하기 문제에서 주어지는 주사위 윷놀이 판의 모습은 아래 그림과 같습니다. 이 모습을 보자마자 그래프를 떠올렸고, 그림을 그래프로 표현하고자 했습니다. 우선 파란색으로 갈 수 있는 곳을 지름길(Shortcut)이라 가정했습니다. 💡 [10, 20, 30에서 출발해 40까지의 길이 모두 지름길입니다.] 💡 [편의상 빨.. 더보기
Arrays.asList()와 ArrayList가 다른 클래스인 이유 흔히 배열을 리스트로 만들 때 Arrays.asList()를 많이 사용하실 것입니다. Arrays.asList()는 아래와 같이 선언되어 있습니다. @SafeVarargs @SuppressWarnings("varargs") public static List asList(T... a) { return new ArrayList(a); } 가변 변수인 a를 받아서 ArrayList로 변환하여 반환합니다. 이와 똑같이 배열을 만들어 우리가 잘 아는 java.util.ArrayList 생성자에 넣어보겠습니다. 위 그림과 같이 불가능 합니다. 왜 그럴까요? 그 이유는 Arrays.asList()로 만들어지는 ArrayList와 java.util.ArrayList가 다른 클래스이기 때문입니다. [java.util.A.. 더보기
백준 - 17822 원판 돌리기 구현 문제입니다. 1. 문제 설명 원판과 조건이 주어지고, 조건처럼 행동했을 때 원판에 남아있는 수의 총합을 구하는 문제입니다. 원판과 그에 인접한 위치를 이차원 배열 그림으로 나타내면 아래와 같습니다. 기본적으로 4방 탐색을 하면서 세로는 위아래 끝이 연결되지 않습니다. 가로는 양옆 끝이 연결되어 있습니다. 또, 원판이 회전하게 되면 가로의 방향으로 만 움직입니다. D가 0일때는 아래와 같이 오른쪽(시계 방향)으로 움직입니다. D가 1일때는 아래와 같이 왼쪽(반시계 방향)으로 움직입니다. X는 회전할 세로 위치를 의미하며, K는 회전의 양을 의미합니다. 2. 접근 방법 접근 방법은 문제 자체에서 주어진 그 순서와 크게 다르지 않습니다. x의 배수의 위치의 배열들을 회전한다. d가 0일경우 오른쪽(시계 .. 더보기
SW Expert - 달란트 2 (Java) 그리디 문제입니다. 문제를 요약하면 다음과 같습니다. N개를 P 묶음으로 나누고, 각 묶음의 곱이 최대가 되게 하라. 만약 P가 3이게 된다면 아래와 같은 식이 도출될 수 있습니다. 합이 일정할 때, 곱을 최대로 하려면 어떻게 해야 할까요? 각 원소의 차이를 최소로 하면 됩니다. N = 8, P = 3 일 때, 아래와 같이 달란트 묶임이 만들어집니다. (2, 3, 3) 과 같이 그 차이가 최소로 만들 때 곱이 최대가 됩니다. [구현 코드] import java.util.*; import java.io.*; public class Solution { public static void main(String[] args) throws IOException { BufferedReader br = new Buff.. 더보기