분류 전체보기
-
Builder 디자인 패턴자바 2024. 2. 13. 15:15
Builder Pattern이란? 빌더 패턴(Builder Pattern)은 복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴이다. 이해하기 쉬운 사례로 수제 햄버거를 들 수 있다. 수제 햄버거를 주문할때 빵이나 패티 등 속재료들은 주문하는 사람이 마음으로 결정된다. 어느 사람은 치즈를 빼달라고 할수 있고 어느 사람은 토마토를 빼달라고 할수 있다. 이처럼 선택적 속재료들을 보다 유연하게 받아 다양한 타입의 인스턴스를 생성할수 있어, 클래스의 선택적 매개변수가 많은 상황에서 유용하게 사용된다. 빌더패턴의 탄생 배경 점층적 생성자 패턴 점층적 생성자 패턴(Telescoping Constructor Pattern)은 필수 매개변수와 함께 선택 매개변수를 0개, 1개, ..
-
백준 15686 치킨 배달 - 조합, 백트레킹코테 풀이 2024. 2. 7. 16:47
이 문제는 백트레킹을 이용해 조합을 구현하고 차근히 조건을 생각하며 풀면 풀리는 문제다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.StringTokenizer; public class Main { //조합 구현 코드 public static ArrayList combination(ArrayList storeList, int m){ ArrayList ans = new ArrayList(); ArrayList..
-
전략 디자인 패턴자바 2024. 2. 6. 10:50
전략 디자인 패턴이란? 전략 디자인 패턴(Strategy Design Pattern)은 객체 지향 소프트웨어 디자인에서 사용되는 패턴 중 하나로, 알고리즘을 정의하고 각각의 알고리즘을 캡슐화하여 서로 교환 가능하도록 만듭니다. 이 패턴은 알고리즘을 독립적으로 변경하고 클라이언트에 영향을 주지 않고 새로운 알고리즘을 추가할 수 있도록 합니다. 전략 패턴은 OOP의 집합체 GoF의 디자인 패턴 책에서는 전략 패턴을 다음과 같이 정의한다. 동일 계열의 알고리즘군을 정의하고 각각의 알고리즘을 캡슐화하여 이들을 상호 교환이 가능하도록 만든다. 알고리즘을 사용하는 클라이언트와 상관없이 독립적으로 알고리즘을 다양하게 변경할 수 있게 한다. 예시 1. 간단한 정렬 알고리즘을 다양한 전략으로 교체할 수 있는 상황을 자바..
-
소프티어 - 순서대로 방문하기(백트레킹)알고리즘 2024. 1. 30. 17:35
처음에는 dfs를 사용하여 stack을 사용해 풀려고 했으나 중복 제거를 처리하지 못해 풀지 못했다. 서로 다른 경우의 수를 구할 때는 백트레킹을 이용해서 풀어보자! 백트레킹은 재귀를 이용해 방문하고 방문 처리한 곳을 다시 취소하는 방법으로 거슬러 올라간다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class OrderVisit { static int[] x_move = {1,0,-1,0}; static int[] y_move = {0,1,0,-1}; //내가 방문한 target의 이전 순서는 다 방문했고, ..
-
TDD자바 2024. 1. 22. 20:57
TDD (test-driven development) - 테스트 주도 개발 소프트웨어 개발 방법론 중의 하나로, 선 개발 후 테스트 방식이 아닌 선 테스트 후 개발 방식의 프로그래밍 방법을 말한다. 다시 말해 먼저 자동화된 테스트 코드를 작성한 후 테스트를 통과하기 위한 코드를 개발하는 방식의 개발 방식을 말한다. TDD를 이용한 개발방법 테스트 케이스 작성 만들고 싶은 기능을 점검할 테스트 코드를 작성한다. 이때, 아직 기능 코드를 구현하지 않았으므로 테스트 결과는 실패로 반환된다. 실패하는 테스트를 가장 빠르게 구현하는 방법은 아무 값이나 반환하도록 하는 것이다. 테스트 케이스를 통과하는 코드 작성 테스트 코드를 만족시킬 수 있는 기능을 구현한다. 테스트 통과를 최우선으로 생각하며 작업한다. 즉 단위..
-
java로 조합 구현알고리즘 2024. 1. 20. 14:04
import java.util.ArrayList; public class C { public static ArrayList combination(int[] nums , int k){ ArrayList ans = new ArrayList(); ArrayList curr = new ArrayList(); boolean[] used = new boolean[nums.length]; int start = 0; backtrack(start, nums, k, ans, curr, used); return ans; } public static void backtrack(int start, int[] nums, int k, ArrayList ans, ArrayList curr, boolean[] used) { if(cu..
-
java로 순열 구현알고리즘 2024. 1. 20. 13:31
import java.util.ArrayList; public class P { public static ArrayList p(int[] nums) { ArrayList ans = new ArrayList(); ArrayList curr = new ArrayList(); boolean[] used = new boolean[nums.length]; backtrack(curr, nums, ans, used); return ans; } public static void backtrack(ArrayList curr, int[] nums, ArrayList ans, boolean[] used){ if(curr.size() == nums.length) { //curr는 참조변수이기 때문에 변경될 때마다 결과 리스트..
-
백준 - 16236번 아기상어코테 풀이 2024. 1. 19. 12:19
이 문제는 여러 조건들을 만족시키는 메소드를 기능 별로 분리해 만들어야 헷갈리지 않는다. 이 문제의 핵심은 "거리가 가까운 물고기가 많다면, 가장 위에 있는 물고기, 그러한 물고기가 여러마리라면, 가장 왼쪽에 있는 물고기를 먹는다." 를 어떻게 처리하느냐다. 나는 기능 별로 두가지 메소드로 나누었다. 1. bfs 메소드 : 다음에 먹을 가장 적절한 물고기의 위치와 거기로 가는데 걸린 시간 반환 2. move 메소드 : bfs 메소드를 호출해서 물고기를 먹고 time을 업데이트하는 재귀함수 나는 핵심 조건을 bfs 메소드에서 PriorityQueue를 이용해 처리했다. PriorityQueue queue = new PriorityQueue(new Comparator() { @Override public i..