분류 전체보기 240

백준-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

백준-1339번/단어 수학(java)

문제 이해 알파벳 대문자에 각각 숫자를 대입한 결과가 최대값이 되는 경우를 구하면 되는 문제이다.ex)   AAA                              999+      AAA              ===>   +   999----------------                     -------------- 문제 해결 1)  알파벳의 끝부터 자릿수 구하기(1,10,100,1000 .....)for(int i=0; i=0; j--){ //자릿수 설정 a[st.charAt(j)-'A']+=v; v=v*10; }} 이 과정을 통해 각 알파벳이 어느 자리에 있는지를 파악할 수 있다.  2) 알파뱃 배열을 자릿수가 큰것부터 내림차순으로 정렬Arrays.sort..

알고리즘/백준 2024.07.31

백준-11725번/트리의 부모 찾기(java)

문제 이해 트리를 생성하고, 각 노드의 부모를 찾는 것을 구현하면 되는 문제이다. 이 문제는 시간초과 때문에 여러번 실패했다. 하지만 리스트로 트리를 구현하였더니 트리의 노드 삽입 및 순회 속도가 간단해져서 정답으로 인정 됐다. 문제 풀이 시간초과가 발생한 코드import java.util.Scanner;public class Problem11725 { static Node head = new Node(1,null,null); static boolean check; static boolean[] visit; static int[] parent; public static void main(String[] args) { Scanner scanner = new Scann..

알고리즘/백준 2024.07.31