전체 글 239

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

백준-1991번/트리순회(java)

문제 이해 자바를 통해 트리를 구현하고 전위순회, 중위순회, 후위순회를 구현해 보았다.파이썬으로는 구현해본 경험이 있지만 자바로는 처음 구현해보아서 약간 생소했다.  이 문제를 풀기 위해서 가장 중요한 것은 노드를 삽입을 구현하는 것이다. 문제 해결 우선 트리를 구현하기 위해서 Node 클래스를 만들어 준다. 필드값1) data ==> 노드가 가지고 있는 데이터2) left ==> 왼쪽 자식 노드3) right ==> 오른쪽 자식 노드 static class Node{ private char data; private Node left; private Node right; Node(char data) { this.data = data; this.left = null..

알고리즘/백준 2024.07.29