분류 전체보기 274

백준 1094번 : 막대기 자바

🧫 문제 분석 ✔️ 출처막대기 실버 5 📖 문제  비트 마스킹 문제인데 바른 방식으로 풀었다. 시간차는 비트마스킹이랑 4ms 차이정도 났다. 비트마스킹 제대로 공부해야겠다.  🔅 문제 풀이import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); ..

baekjoon 2024.09.07

백준 1030번 : 프렉탈 평면 자바

🧫 문제 분석 ✔️ 출처프렉탈 평면 골드 3 📖 문제  분할 정복 문제증말 어려웠던 문제였다. 필자는 먼저 s초가 흐른 뒤의 크기부터 n으로 나눠가며 분할했다.n^s → n ^s / n → n ^s - 1 / n ...핵심black 체크 (어떻게 계속해서 분할되는 정사각형에서 black인지 아닌지 확인할 것인가)주어진 범위를 벗어나면 탐색 범위 제외 black 체크black 체크의 경우 문제에서 나와있듯이 (N - K) % 2 = 0이다.즉 , 분할한 각 구역의 시작 위치에서 대각선으로 (N - K) / 2 만큼 떨어져있다는 의미이기도 하다.이를 블랙 포인트라 하자.문제는 시간이 지날수록 n*n 씩 나눠지고, 사각형은 k*k 크기로 만들어진다.  앞서 말했듯이 n^s 부터 시작한다. 여기서 구한 블랙..

baekjoon 2024.09.05

스프링 고급편 - 프록시 패턴과 데코레이터 패턴

✔️ 프록시 패턴  프록시는 대체자 이다.프록시의 주요 기능접근 제어권한에 따른 접근 차단캐싱지연 로딩부가 기능 추가원래 서버가 제공하는 기능에 더해서 부가 기능을 수행예) 요청 값이나, 응답 값을 중간에 변형예) 실행 시간을 측정해서 추가 로그를 남김프록시는 체인 작용이 가능하다.     GOF 디자인 패턴둘다 프록시를 사용하지만 의도에 따라서 프록시 패턴과 데코레이터 패턴으로 구분프록시 패턴 : 접근 제어가 목적데코레이터 패턴 : 새로운 기능 추가가 목적위 그림을 보면클라이언트가 subject에 접근하지만 subject의 구현체인 proxy가 캐시 처리를 하고없다면 target으로 realSubject를 이용해서 처리package hello.proxy.pureproxy.proxy.code;import..

백준 2447번 : 별 찍기 - 10 자바

🧫 문제 분석 ✔️ 출처별 찍기 골드 5 📖 문제 분할정복 문제로N이 3의 거듭 제곱으로 주어지고 3의 거듭 제곱을 3으로 나눌때 중앙이 공백이 되어야한다. 재귀로 주어진 N / 3 을 하여 3등분을 하고 (이에 따라 N/3 개의 위치가 생김)각 위치에 따라 재귀로 호출한 후재귀가 끝나면 각 구역의 가운데 부분을 for문을 돌면서 빈칸을 채운다.  예를 들어 27이면y : 0, 9, 18 x : 0 , 9, 18  이런 식으로 3등분 했을 때 구역의 첫 위치를 재귀로 넘긴다.   나는 먼저 배열을 *로 가득 채운 상태에서 공백을 넣는 방법을 사용하였다.  🔅 문제 풀이import java.io.*;import java.util.*;public class Main { static char[][]..

baekjoon 2024.09.04

백준 11057번 : 오르막 수 자바

🧫 문제 분석 ✔️ 출처오르막 수 실버 1 📖 문제 깊이 별로 나누되 0~10까지 에 대해서 동적프로그래밍을 한다. 중요한 점수는 0으로 시작할 수 있다는 것이다.  현재 깊이의 각 수는 이전 깊이의 현재 수부터 9까지의 개수 합을 더하면 된다.   수 \ 깊이12301깊이 1의 0~9까지 : 10깊이 2의 0~9 까지 : 5511깊이 1의 1~9까지 : 9깊이 2의 1~9까지 : 4521깊이 1의 2~9까지 : 8깊이 2의 2~9까지 : 36 잘 모르겠다면 노드로 직접 그려보면 바로 알기 쉽다.  🔅 문제 풀이import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws I..

baekjoon/DP 2024.09.03

배열의 복사 : clone() 메서드 자바

✔️ 1차원 배열 깊은 복사얕은 복사는 그냥 대입하면 되므로 깊은 복사를 중점으로 정리 1차원 배열 깊은 복사는 배열의 메서드인 clone() 을 사용하면 된다.  int[] arr = {1,2};int[] arr2 = arr.clone();   Testpublic class Main { public static void main(String[] args) throws IOException { int[] arr = {1, 2}; int[] arr2 = arr.clone(); arr[0] = 55555; for (int i : arr) { System.out.print(i + " "); } System.ou..

JAVA 2024.09.03

백준 14502번 : 연구소 자바

🧫 문제 분석  ✔️ 출처연구소 골드 4 📖 문제 완전탐색  + BFS 문제이다. ( + 백트래킹...?) 단순하게 0인 곳에서 1을 세우되 3개까지만 세우고 BFS로 탐색해보고 퍼진 바이러스 개수의 최솟값을 구한다. 1을 세우는 것은 모든 구역에 대해서 진행하면 된다.  1로 된 벽 개수를 세고바이러스 위치를 list에 담고안전한 구역을 zeroList에 담는다.  list는 bfs에서 빠르게 사용하기 위함이고,zeroList는 완전탐색을 빠르게 하기 위함이다. 전체 크기 - (벽의 개수 + 새롭게 세운 벽 3개 + 바이러스 개수의 최솟값) 이 안전구역의 최댓값이다.  🔅 문제 풀이import java.io.*;import java.util.*;public class Main { static..

백준 1436번 : 영화감독 숌 자바

🧫 문제 분석 ✔️ 출처영화감독 숌 실버 5 📖 문제 완전탐색 문제로6이 3개 이상 연속되어 들어가는 수를 말한다고 한다.즉 여러 수 중에 "666"이 포함되어 있으면 그 수는 종말의 수 라는 것이다. 문제의 이해를 잘 못했는데결국에는 사전 순서? 크기 순서대로 번호가 주어진다. 5666 -> 6660 -> 6661 -> ~ 6669 -> 7666 ... 이런식으로 가는 것이다. 나는 단순히 666부터 시작해서 intMax까지 완전탐색을 했다.현재 수를 문자열로 바꾸고 contains로 666이 포함되어있으면 count 하고count가 N과 같다면 count에 그 수를 저장하고 탐색을 종료한 뒤 count를 반환한다  🔅 문제 풀이import java.io.*;import java.util.*;pu..

백준 2805번 : 나무 자르기 자바

🧫 문제 분석 ✔️ 출처나무 자르기 실버 2 📖 문제 이진 탐색 문제로나무를 잘랐을 때 적어도 M 미터의 나무를 집에 가져가기 위해 설정할 수 있는 높이의 최댓값을 구해야한다. 여기서 적어도 M미터의 의미는절단 높이가 최댓값을 가질때까지 찾되 적어도 M 미터 이상은 가져가야겠다는 의미이다. 예를 들어1~Int Max 의 절반으로 잘랐을 때 M미터를 넘겼다면 좀 더 그 위에를 잘랐을 때 M 미터 이상이면서 자르는 높이를 높여서 나무를 덜 자를 수 있는 경우가 있다.  푸는 방식 이진 탐색을 하되M 미터 이상이면 높이를 더 높여서 탐색해본다. 주의할 점자르는 높이 이하인 나무들은 무시해야한다.  반례 하나를 남기겠다.2 73 9정답 : 2오답 : 0 밑에 처럼 짜면 오답이 나온다. 이유를 생각해보자if ..

백준 1654번 : 랜선 자르기 자바

🧫 문제 분석✔️ 출처랜선 자르 실버 2 📖 문제 이진 탐색, 바이너리 서치 이진 탐색에 대해서 공부한 뒤에 풀 수 있었다. 힙, 트리 자료구조 배웠을 때 배웠었는데 막상 이런거에 적용할 수 있다는 거에서 당황.. 문제에서 중요한 점N개보다 많이 만드는 것도 N개를 만드는 것에 포함된다. 그외에는단순히 이진 탐색을 하면 된다.중앙 값으로 각 랜선을 나눠서 나온 개수를 구한다.개수가 n보다 크거나 같으면 최댓값을 구하기 위해 랜선의 길이를 더 늘리고 탐색한다. 개수가 n보다 적다면 이는 랜선의 길이가 너무 길기 때문에 랜선의 길이를 줄이고 탐색한다.    🔅 문제 풀이import java.io.*;import java.util.*;public class Main { static long[] la..