본문 바로가기

전체 카테고리361

[Java] Comparable과 Comparator을 이용한 정렬 코딩을 하다보면 컬렉션에 들어있는 객체를 정렬해야 할때가 있다. 이때 객체의 정렬 기준을 "Comparable"이나 "Comparator"를 이용해서 명시해줄 수 있다. 1. Comparable Comparable 인터페이스는 정렬 수행 시 기본적으로 적용되는 정렬 기준이 되는 메소드를 정의하는 인터페이스이다. Java에서 제공되는 정렬이 가능한 클래스들은 모두 Comparable 인터페이스를 구현한다. 정렬 시에 이에 맞게 정렬이 수행된다. // Integer class public final class Integer extends Number implements Comparable { ... } // String class public final class String implements java.i.. 2020. 7. 19.
[BAEKJOON] 2407번: 조합 (Java) 완전탐색 문제를 풀다가 순열과 조합 유형이 자주 나와서 계속 풀어보고 있다. nCm을 구하는 것이 문제이다. 1. 문제 2. 풀이 과정 2.1 재귀를 통한 접근 첫번째 접근 방법은 고등학교 때 배운 파스칼의 삼각형을 떠올려, 재귀를 이용한 방법으로 풀어보았다. 코드는 아래와 같다. import java.util.Scanner; public class Main { public static long paskal(int n, int m){ if(m == 0 || n == m){ return 1; } return paskal(n-1,m-1) + paskal(n-1,m); } public static void main(String[] args) { Scanner sc = new Scanner(System.in);.. 2020. 7. 16.
템플릿 메소드(Template Method Pattern) 패턴이란? 1. Template Method Pattern 2. Example 코드로 위의 구조를 한번 만들어 보겠습니다. public abstract class AbstractClass { protected abstract void hook1(); protected abstract void hook2(); public void templateMethod() { hook1(); hook2(); } } 다음은 ConcreteClass 입니다. public class ConcreteClass extends AbstractClass { @Override protected void hook1() { System.out.println("ABSTRACT hook1 implementation"); } @Override prot.. 2020. 7. 13.
빌더 패턴(Builder Pattern)이란? 1. Builder Pattern 인스턴스를 생성할 때 생성자만을 통해서 생성하게 되면, 생성자를 일일이 정의를 해줘야 한다던가 생성자에 들어갈 변수의 순서를 맞춰야하는 등의 불편함이 있습니다. 빌더 패턴은 이 문제를 해결하기 위해 고안된 패턴 중 하나 입니다. 인스턴스를 생성할 때 인자를 선택적으로 가독성 좋게 넘길 수 있다. 인자의 순서에 상관이 없어진다. 불필요한 생성자를 만들지 않는다. 2. 빌더 패턴을 사용 하는 경우 빌더 패턴은 많은 Optional한 멤버 변수(혹은 파라미터)나 지속성 없는 상태 값들에 대해 처리해야 하는 문제들을 해결합니다. 예를 들어, 팩토리 패턴이나 추상 팩토리 패턴에서는 생성해야하는 클래스에 대한 속성 값이 많을 때 아래와 같은 이슈들이 있습니다. 클라이언트 프로그램으.. 2020. 7. 13.
팩토리 메소드 패턴(Factory Metod Pattern)이란? 1. Factory Method Pattern 팩토리는 공장이라는 뜻입니다. 즉 팩토리 메소드 패턴도 무엇인가를 만들어내는 공장이라고 생각하면 됩니다. 객체를 만들어내는 부분을 서브 클래스에 위임하는 패턴. 즉, new 키워드를 통해서 객체를 만드는 코드를 서브 클래스에 위임하겠다는 것입니다. 결국 팩토리 메소드 패턴은 객체를 만들어내는 공장을 만드는 패턴이라고 생각하시면 됩니다. 2. Example 이제 예제를 진행하면서 알아보겠습니다. 예제에서 사용할 객체는 "로봇"입니다. 여러 종류의 로봇을 만드는 공장을 생성해보겠습니다. 2.1 Structure 예제에서 만들 로봇의 종류는 "SuperRobot"과 "PowerRobot"입니다. 그리고 로봇을 생산해내는 로봇공장은 "SuperRobotFactoy".. 2020. 7. 13.
[BAEKJOON] 2004번: 조합 0의 개수 (Java) 1. 문제 nCm의 끝자리 0의 개수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 정수 n, m(0≤m≤n≤2,000,000,000, n!=0)이 들어온다. 출력 첫째 줄에 0의 개수를 출력한다. 예제 입력 25 12 예제 출력 2 2. 풀이 처음 이 문제를 접근할 때 nCr = n!/(n-r)!r! 공식을 통해서 접근하려고 했다. 하지만 입력 범위가 m,n이 최대 20억인걸 보고 당연히 이 방식은 아닐꺼라고 생각했다. 그리고 끝이 0이 되려면 2x5 쌍이 1개 일 경우 뒤에 0이 한개 생기므로 2와5가 곱해진 개수를 세서 2와5의 지수 중 작은거를 선택하면 되겠다고 접근했다. 여기서 하나 더 생각해야할 것은 2와 5의 지수의 총합을 어떻게 구할지 였다. 100!을 생각해 봤을 때, 5가 곱해진 개.. 2020. 7. 12.