일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- JavaScript
- SpringBoot
- spring
- oracle
- json
- 자바
- SSL설정
- 시(hour)
- boot
- degien pattern
- 곱 최대값
- list
- ThreeWayPartition
- 시간더하기
- map
- 널체크
- 알고리즘
- 조인
- 스트레티지패턴
- 자바스크립트
- jQuery
- 매일프로그래밍
- Flyweight Pattern
- 병합정렬
- java
- 디자인패턴
- 생년
- 분(minute)
- 파사드패턴
- 초(second)
- Today
- Total
목록IT/JAVA (13)
만들어가는 세상
문제를 풀어보진 않았습니다. 개념 이해 및 공유 차 내용 포스팅 합니다. 문제 정수 배열이 주어졌을 때, 배열 안에서 곱이 최대가 되는 두 정수를 찾으시오. 매일프로그래밍 문제 기준 Input: [-10, -3, 5, 6, -2] Output: [-10, -3] 또는 [5, 6]풀이1 단순한 방법은 모든 쌍에 대해 곱을 계산하는 것입니다. 계산한 쌍의 곱이 이전보다 크면 새로운 쌍의 곱과 두 수를 저장하면서 가장 큰 곱을 찾아갑니다. class FindMaximumProduct { public static void findMaximumProduct(int[] A) { int max_product = Integer.MIN_VALUE; int max_i = -1, max_j = -1; // 모든 원소들의 쌍..
파사드 패턴(facade pattern) 개념 Gof 서적에 따르면 Facade 패턴은 "하위 시스템을 보다 쉽게 사용할 수 있게 해주는 고급 인터페이스를 정의한다." 라고 되어 있습니다. Facade 패턴은 어댑터 패턴과 거의 같은 방식으로 작동하지만 서로 다른 목적을 가지고 있습니다. Adapter 패턴은 원래 코드를 다른 코드와 작동할 수 있는 래퍼를 제공한다. Facade 패턴은 원래 코드를 더 쉽게 처리 할 수 있는 래퍼를 제공한다. 사용 예 : 캡슐화되지 않은 코드를 처리 할때 Facade 패턴을 사용한다. 원하는 코드를 다시 작성할 수 없을 때 일반적으로 Facade 패턴을 사용한다. Facade를 사용하면 문제를 해결할 수 있지만 기본 코드가 변경되면 Facade 패턴도 변경해야 한다. 이..
병합 정렬 개념 병합 정렬은 여러 개의 정렬된 자료의 집합을 결합해 하나의 집합으로 만드는 정렬 방법이다. 이 정렬은 전체를 상대로 수행하지 않고 분할(Divide)한 뒤 각 부분집합들에 대해 정렬한 후 다시 결합(Combine)하는 분할 정복(Divide and Conquer) 기법을 사용한다. 분할 정복법(Divide and Conquer)은 여러 알고리즘의 기본이 되는 해결방법으로, 기본적으로는 엄청나게 크고 방대한 문제를 조금씩 조금씩 나눠가면서 용이하게 풀 수 있는 문제 단위로 나눈 다음 그것들을 다시 합쳐서 해결하자는 개념에서 출발하였다. 대표적으로는 퀵소트 나 합병정렬이 있다. 매일프로그래밍 문제 기준 문제 사이즈가 m인 배열 X와 사이즈가 n인 배열 Y가 주어집니다. 두 배열은 모두 정렬된..
계수 정렬 개념 계수 정렬(Counting Sort)이란? 데이터 값을 직접 비교하지 않고, 단순하게 개수를 세어 기록하고 정렬하는 방식이다. 값 비교가 일어나지 않기 때문에 속도가 매우 빠르다. 하지만 개수를 저장하는 배열, 정렬할 배열을 위한 추가 공간이 필요하다. 또한 숫자가 매우 큰 경우에는 속도가 현저히 느려질 수 있다. 매일프로그래밍 문제 기준 문제 원소가 0, 1, 2로 구성된 배열이 주어졌을 때, 상수 공간을 이용해 선형 시간에 배열을 정렬하시오. 문제의 핵심은 주어진 배열만을 이용하는것 입니다. 주어진 배열로 Output을 처리하려면 병합정렬을 사용하면 됩니다. Input: [0, 1, 2, 2, 1, 0, 0, 2, 0, 1, 1, 0] Output: [0, 0, 0, 0, 0, 1, ..
병합 정렬 개념 병합 정렬은 여러 개의 정렬된 자료의 집합을 결합해 하나의 집합으로 만드는 정렬 방법이다. 이 정렬은 전체를 상대로 수행하지 않고 분할(Divide)한 뒤 각 부분집합들에 대해 정렬한 후 다시 결합(Combine)하는 분할 정복(Divide and Conquer) 기법을 사용한다. 매일프로그래밍 문제 기준 문제 두 개의 정렬된 배열 X, Y가 주어졌을 때, 두 배열의 크기를 유지하면서 두 배열의 전체를 정렬하시오. 즉, 배열 X에는 작은 수들로 배열 Y에는 큰 수들로 구성되고 원소들은 정렬되어 있어야 합니다. 단, 정렬 시 다른 자료 구조를 사용하지 않고 주어진 배열만을 이용해야 합니다. 문제의 핵심은 주어진 배열만을 이용하는것 입니다. 주어진 배열로 Output을 처리하려면 병합정렬을 ..
스트레티지 패턴 개념 여러 알고리즘을 하나의 추상적인 접근점(인터페이스)을 만들어 접근점에서 알고리즘이 서로 교환 가능하도록 하는 패턴 동일 목적 알고리즘의 선택 적용 문제 예를 들면 불필요한 분기문 처리도 해결 할수 있습니다. 인터페이스 가능에 대한 선언(구현과의 분리) 여러가지 기능을 사용하기 위한 단일 통로 사용 예 : 워드 문서에서 프린터, 폰트 사용 프린터 제조사와 관계없이 프린트 가 가능하다. 게임 케럭터의 무기(교체 후) 사용 무기 변경 검,도끼,활 변경에 따른 사용이 가능하다. 이제 코드로 확인해봅니다. 일반적으로 쓰이는 객체를 선언하여 메소드를 사용하는 방법입니다. public class AObj { public void SomeFunc() { // 다음 기능을 수행합니다. System...
플라이웨이트 패턴 개념 플라이웨이트 패턴은 비용이 큰 자원을 공통으로 사용 할 수 있도록 만드는 패턴입니다. 자원에 대한 비용은 크게 두가지로 나눠 볼 수 있습니다. 중복 생성될 가능성이 높은 경우 생성될 가능성이 높다는 것은 동일한 자원이 자주 사용될 가능성이 매우 높다는 것을 의미한다. 이런 자원은 공통 자원 형태로 관리해 주는 편이 좋습니다. 자원 생성 비용은 큰데 사용 빈도가 낮은 경우. 이런 자원을 항상 미리 생성해 두는 것은 낭비이다. 따라서 요청이 있을 때에 생성해서 제공해 주는 편이 좋습니다. 이 두가지 목적을 위해서 플라이웨이트 패턴은 자원 생성과 제공을 책임진다. 자원의 생성을 담당하는 Factory 역할과 관리 역할을 분리하는 것이 좋을 수 있으나, 일반적으로는 두 역할의 크기가 그리..
[JAVA] 파일에서 확장자만 또는 파일명만 가져오기 이 로직은 은근히 많이 사용되며, 자주 잊어버리거나, 귀차니즘이 있을때 한번 쓰고 다시 찾는 방법입니다. 특히 알고리즘에서도 많이 쓰이는 IndexOf값을 이용한 위치 찾는 로직이 있는데 꽤 많이 쓰입니다. int pos = val.lastIndexOf("."); String ext = val.substring(pos+1, val.length()); 방법1 test.png를 val 변수에 대입합니다. allowPattern 에는 jpg, png값만 허용할수 있는 변수를 생성합니다. Pattern.compile 메소드를 이용하여 하나의 Pattern이 만들어 집니다. val.toLowerCase()는 확장자가 대,소문자가 올수 있기 때문에 전부 소문자로..