전체 글 썸네일형 리스트형 디자인 패턴 - 팩토리 메소드 패턴(Factory Method Pattern) 1. 정의 객체를 생성할 때 필요한 인터페이스를 만든다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정한다. 팩토리 메소드를 사용하면 인스턴스를 만드는 일을 서브클래스에 맡길 수 있다. 💡 추상 팩토리를 통해 일관된 방법으로 객체를 생성하는데, 팩토리 메소드 패턴을 통해 구체적인 객체를 서브클래스에서 생성되게 한다. 2. 예시 서울과 제주 피자 체인점에서 피자를 주문한다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ PizzaStore seoul = new SeoulPizzaStore(); seoul.orderPizza("cheese").getDescription(); seoul.orde.. 더보기 디자인 패턴 - 추상 팩토리 패턴(Abstract Factory Pattern) 1. 정의 구체적인 클래스에 의존하지 않고도 서로 연관되거나 의존적인 객체로 이루어진 군집을 생성하는 인터페이스를 제공한다. 구체적인 클래스는 서브클래스에서 생성한다. 💡 관련성이 있는 객체를 일관된 방식으로 생성할 수 있는 디자인 패턴 2. 예시 서울과 제주에 피자 체인점을 낸다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ PizzaStore seoul = new SeoulPizzaStore(); System.out.println("------"); PizzaStore jeju = new JejuPizzaStore(); } } public abstract class Pizza { String.. 더보기 디자인 패턴 - 데코레이터 패턴(Decorator Pattern) 1. 정의 객체에 추가 요소를 동적으로 추가한다. 서브 클래스를 만들 때 보다 훨씬 유연하게 기능을 확장할 수 있다. 2. 예시 커피에 2샷과 모카를 추가한다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Clinet { public static void main(String[] args){ Beverage coffee = new Coffee(); coffee = new MochaAdditive(new ShotAdditive(new ShotAdditive(coffee))); System.out.println("[주문]"); System.out.println(coffee.getDescription()); System.out.println("-------"); System.out.pr.. 더보기 디자인 패턴 - 옵저버 패턴(Observer Pattern) 1. 정의 주제(subject)의 상태가 바뀌면 그 객체에 의존하는 다른 객체(observer)에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의한다. 2. 예시 엄마, 아빠에게 자식의 성적을 알린다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ Child child = new Child(); Mother mom = new Mother(child); // 엄마만 등록 child.setValue(100); child.removeObserver(mom); // 엄마 삭제 System.out.println("---------"); Father dad = n.. 더보기 백준 - 17090 미로 탈출하기(Java) 백트랙킹 문제입니다. N*M 미로에서 각 위치마다 움직일 수 있는 방향이 정해져있습니다. U인 경우에는 (r-1, c)로 이동 R인 경우에는 (r, c+1)로 이동 D인 경우에는 (r+1, c)로 이동 L인 경우에는 (r, c-1)로 이동 즉, 상하좌우에 따라 움직인다는 말입니다. 각 위치마다 움직일 수 있는 방향이 정해졌으므로, 처음 지나가는 길에 탈출할 수 있는 길인지 아닌지를 기록해두면, 이미 한 번 지나갔던 길에 도달하면 끝까지 다시 탐색을 할 필요가 없습니다. 예제 입력 2번으로 설명 드리겠습니다. 예제 입력 2번은 다음 그림과 같습니다. 위 그림에서 (0, 0)을 먼저 탐색하면 다음 그림과 같습니다. 지나간 길은 탐색 결과를 반환하여 저장하면 됩니다.(dfs) 다음으로 (0, 1)을 탐색하면 .. 더보기 백준 - 12784 인하니카 공하국(Java) dfs 문제입니다. 진은 1번섬에 거주하고 있습니다. 괴도 루팡이 있을 만한 위치의 섬에서 1번 위치의 섬으로 올 수 없게 간선을 짜르는 문제입니다. 각 간선은 가중치가 있습니다. 각 섬들은 최소의 다리를 사용해 모두 연결되어 있다고 나와있습니다. 이 말을 다시 생각해보면 섬의 연결 관계는 최소 신장 트리(MST, Minimum Spanning Tree)라는 것을 알 수 있습니다. 또, 괴도 루팡은 다리가 하나인 섬에 있다고 나와있습니다. 이 말은 괴도 루팡은 리프 노드(Leaf Node)에 있다는 말입니다. 즉, 문제를 다시 해석하면 다음과 같습니다. 1번 노드와 모든 리프노드가 연결될 수 없게 간선을 짜른다. 단, 간선을 짜를 때의 가중치를 최소로 한다. 그러면, 가중치를 최소로 짜르는 방법은 어떻게.. 더보기 백준 - 14267 회사 문화 1(Java) 구현 문제입니다. 회사원 n, 칭찬 횟수 m이 첫 번째 줄에서 주어집니다. 두 번째 줄은 1번 회사원 부터 직속 상사의 번호가 주어집니다. 이 말을 반대로 생각하면 주어지는 값의 인덱스가 직속 후배라는 뜻입니다. -1, 1, 2, 3, 4 가 주어진다고 하겠습니다. 인덱스 1번의 값은 -1입니다. 최상위 상사인 것을 알 수 있습니다. 인덱스 2번의 값은 1입니다. 2번의 직속 상사는 1번이자, 1번의 직속 후배는 2번으로 해석할 수 있습니다. 인덱스 3번의 값은 2입니다. 3번의 직속 상사는 2번이자, 2번의 직속 후배는 3번으로 해석할 수 있습니다. 인덱스 3번의 값은 4입니다. 4번의 직속 상사는 3번이자, 3번의 직속 후배는 4번으로 해석할 수 있습니다. 인덱스 4번의 값은 5입니다. 5번의 직속 .. 더보기 백준 - 2146 다리 만들기(Java) bfs 문제입니다. 서로 다른 섬을 연결하는 최소 간선의 비용을 구하는 문제입니다. 다리를 만들 수 있는 방법은 많지만, 최소 간선을 보장해야 하기 때문에 bfs를 써야 한다는 것을 알 수 있습니다. 문제 접근 방법은 다음과 같습니다. 탐색을 하여 같은 섬일 경우 넘버링을 동일하게 한다.(dfs) 바다인 곳을 탐색하면서 다른 섬에 도착하면 탐색을 멈춘다.(bfs) 💡 1번 넘버링의 경우 dfs, bfs 둘 중 아무거나 해도 상관 없습니다. 그림과 같이 넘버링을 통해 같은섬인지 아닌지 확인합니다. 같은 섬이 아닐경우(바다 or 다른 섬)를 bfs로 진행하시면 됩니다. [구현 코드] import java.io.*; import java.util.LinkedList; import java.util.Queue;.. 더보기 이전 1 ··· 18 19 20 21 22 23 24 ··· 48 다음