분류 전체보기 213

백준-1931번/회의실 배정 (java)

문제 이해 N개의 회의 시작시간, 끝나는 시간이 주어질때  각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 구해주면 된다. 이 문제에서 가장 중요한 점은 각 회의들의 종료 시간이 빠른 순으로 정렬을 해야한다는 점이다.왜냐하면 종료시간 기준으로 오름차순 정렬을 해주면 회의가 빨리 끝나서 최대한 많은 회의를 진행하는 경우를 구할 수 있기 때문이다.  문제 해결 ex) 예제 입력111 43 50 65 73 85 96 108 118 122 1312 14  이것을 종료시간 기준 오름 차순으로 정렬해주면 다음과 같이 변한다.[1, 4][3, 5][0, 6][5, 7][3, 8][5, 9][6, 10][8, 11][8, 12][2, 13][12, 14] 1에 시작 ---> 4에 종료..  ..

알고리즘/백준 2024.08.23

백준-11047번/동전 0 (java)

문제 이해 N개 종류의 동전이 존재(각 종류별로 동전의 갯수는 충분히 존재함)이 동전들로 K원을 만들 수 있는 최소 동전의 갯수를 구하면 된다. 문제 해결 동전을 입력 받을때 오름 차순으로 입력받으므로 배열의 뒷부분(가장큰 금액의 동전)부터 연산에 포함해주면 최소한의 동전으로 K원을 맞출 수 있다.import java.util.Scanner;public class Problem11047 { static int N; static int K; static int[] arr; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int count=0; N=s..

알고리즘/백준 2024.08.21

회원가입 로그인 구현

우선 맴버를 정의 해준다( 로그인 아이디, 패스워드를 가짐)package hello.login.domain.member;import lombok.Data;import javax.validation.constraints.NotEmpty;@Datapublic class Member { private Long id; @NotEmpty private String loginId; //로그인 아이디 @NotEmpty private String name; @NotEmpty private String password;}@NotEmpty를 넣어 줌으로써 아이디 비밀번호의 공백을 방지해준다.  @Controller@RequiredArg..

BackEnd/spring 2024.08.19

백준-10026번/적록색약 (java)

문제 이해위 표와 같이 RGB로 구성된 그래프에서 색깔별 구역의 갯수를 구해주면 된다. 단, 적록색약의 경우 R과 G를 구분하지 않고 구역의 수를 구해준다.구역의 갯수를 구해주면 되므로 연결성분의 수를 구해줄때와 마찬가지로 BFS로 구현해봤다.문제 해결 BFS구현public static void bfs(int x, int y, char c){ Queue queue = new LinkedList(); queue.add(new int[]{x, y}); visit[x][y] = true; while(!queue.isEmpty()){ int[] point = queue.poll(); int pointX = point[0]; int pointY = poi..

알고리즘/백준 2024.08.13

백준-14502번/연구소(java)

문제 이해 N X M 크기의 이차원 배열의 구성 요소0 ==> 빈공간1 ==> 벽2 ==> 바이러스( 상하좌우로 이동 가능) 조건1) 바이러스는 상하좌우로만 이동 가능2) 벽은 무조건 3개만 세울 수 있다. 문제를 풀기 위해서는 임의의 빈 공간에 벽을 3개 세운 다음 바이러스를 퍼뜨리고 연구소에서 바이러스가 없는 빈 공간의 갯수를 세면 된다. 구현 로직 벽 세우기 ==> 임의의 빈 공간에 벽을 3개 세울 수 있는 모든 경우를 고려 해야 하므로 DFS로 구현바이러스 퍼뜨리기 ==> 상하좌우로 이동하는 것을 구현하기 위해 BFS로 구현  문제 해결  DFS ==> 3개의 벽을 세울수 있는 경우를 모두 구하기public static void dfs(int wall){ //벽 세우기 if(wall==3){..

알고리즘/백준 2024.08.08

백준-16198번/에너지 모으기(java)

문제 이해에너지 구슬 하나를 고른다. 고른 에너지 구슬의 번호를 x라고 한다. 단, 첫 번째와 마지막 에너지 구슬은 고를 수 없다.x번째 에너지 구슬을 제거한다.Wx-1 × Wx+1의 에너지를 모을 수 있다.N을 1 감소시키고, 에너지 구슬을 1번부터 N번까지로 다시 번호를 매긴다. 번호는 첫 구슬이 1번, 다음 구슬이 2번, ... 과 같이 매겨야 한다.ex)5100 2 1 3 100 2제거 ==> 에너지 : 100*1=1001제거 ==> 에너지 : 100 + (100*3) = 4003제거 ==> 에너지 : 400+(100*100) =10400 에너지 구슬이 2개가 남으면 아무 구슬도 선택할 수 없으므로 종료 이 문제는 모든 경우의 에너지를 구해야 하는 문제이므로 백트래킹을 구현하여 모든 경우의 수에서..

알고리즘/백준 2024.08.06

BeanValidation-Form 전송 객체 분리

검증시 등록할때의 객체와 수정할때의 객체가 다르면 groups를 이용하여 데이터를 검증하기가 어려워진다. 간단한 프로젝트를 통해 이해할 수 있었다. 프로젝트 요구사항Item 등록시 1) 상품이름 = NULL(X)2) 가격 = 1000이상, 1000000이하, NULL(X)3) 상품 수량 = 최대 9999 Item 수정시1) 상품id = NULL(X)2) 상품이름 = NULL(X)3) 가격 = 1000이상, 1000000이하, NULL(X)4) 상품수량 = 수정할때는 수량의 제한이 없음  이러한 제한사항을 구현하기 위해 Form 전송 객체를 분리 하였다.  - 상품 등록 시 사용package hello.itemservice.web.validation.form;import lombok.Data;import ..

BackEnd/spring 2024.08.05

백준-14225번/부분수열의 합(java)

문제 이해문제수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오.예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들 수 있다. 하지만, 4는 만들 수 없기 때문에 정답은 4이다.입력첫째 줄에 수열 S의 크기 N이 주어진다. (1 ≤ N ≤ 20)둘째 줄에는 수열 S가 주어진다. S를 이루고있는 수는 100,000보다 작거나 같은 자연수이다.출력첫째 줄에 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 출력한다. 주의할 점 : 수열 S를 이루고 있는 숫자가 100,000보다 작거나 같은 자연수, 수열의 크기는 최대 20 ==> 수열의 합으로 ..

알고리즘/백준 2024.08.02

백준-14888번/연산자 끼워넣기(java)

문제 이해 모든 경우의 수를 구해보면서 조건을 만족시키는 값을 구해야 하므로 백트래킹을 사용해야 하는 문제이다. ※주의 할 점연산의 우선순위를 무시하고 앞에서부터 차근차근 계산해야 한다. 문제 풀이 백트래킹을 구현하기 위해 DFS를 구현했다.이때 처음 value값으로 넘어오는 것은 arr[0]번째 수이다.public static void dfs(int index, int value) { // 모든 숫자를 다 사용한 경우 if(index == N) { if(value > max) { max = value; } if(value 0) { x[i]--; if(i == 0) { // + ..

알고리즘/백준 2024.08.01