목록전체 글 (119)
이것저것
Effective Java [아이템 3 : private 생성자나 열거 타입으로 싱글턴임을 보증하라] 싱글턴 (Singleton) 이란? : 생성자가 여러번 호출되더라도 실제로 생성되는 객체는 하나이고, 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴 ex) 함수와 같은 무상태(stateless) 객체나 설계상 유일해야하는 시스템 컴포넌트, DBCP 싱클턴 패턴 장점 - 한 번의 객체 생성으로 재사용 가능하므로 메모리 낭비 방지 - 전역성을 갖기 때문에 다른 객체와 공유 용이 싱글턴 패턴 단점 - 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기 어렵다. (타입을 interface로 정의한 다음 그 interface를 구현해 만든 싱글턴이 아니라면 싱글턴 인스턴스를 가..
Effective Java [아이템 2 : 생성자에 매개변수가 많다면 빌더를 고려하라] 생성자 (점층적 생성자 패턴) 를 사용하여 인스턴스를 만들때, 매개변수 개수가 많아지면, 클라이언트 코드를 작성하거나 읽기 어려워진다. 매개변수의 순서에 따라 주입되는 값이 달라지고, 매개변수가 추가될 때마다 생성자를 추가로 생성해주어야한다. 이러한 단점을 보완하기 위해, setter 메서드를 호출하여 매개변수의 값을 설정하는 JavaBeans pattern 이 있다. JavaBeans pattern은 가독성은 좋지만, 하나의 객체를 만들기 위해 여러 setter 메서드를 호출해야하고, 객체가 완전히 완성되기 전까지 일관성이 무너진 상태이다. 이 포스팅에서는 Builder pattern만 다뤄본다! Builder Pa..
Effective Java [아이템 1 : 생성자 대신 정적 팩터리 메서드를 고려하라] 클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단 = "public 생성자" 클래스는 생성자와 별도로 정적 팩토리 메서드(static factory method)제공 가능 (static 메서드로 객체 생성을 캡슐화 한다. ex) public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE; } 위 메서드는 기본 타입인 boolean을 받아 Boolean 객체 참조로 변환 정적 팩토리 메서드의 장점 이름을 가질 수 있다.정적 팩토리는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. //yunsu가 이름인지 전화번호인지 ..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr Floyd-Warshall 알고리즘 사용 문제 Point : 경유지를 무엇으로 설정할까? -> 결국 경유지를 다 탐색해봐야하는 완전 탐색 문제! 프로이드-와샬 알고리즘을 사용해서 해결할 수 있는 문제다. 이 문제의 핵심은 경유지를 무엇으로 정하는가 이다. 아래 그림에서 1,2,3,4,5,6 에 경유지를 둘 수 있다. (여기서 경유지를 둔 다는 것은 출발점에서 경유지 지점까지 (S -> K)는 "무지"와 "프로도"가 함께 택시를 타고 경유지에서 각각의 도착지점까지 (K->A or K->B) 까지는 따로 택시를 ..
2.1.2 인덱스 구조 인덱스를 사용하면 전체 테이블 스캔 필요없이 범위 스캔(range scan) 가능하다. 범위 스캔이 가능한 이유는 인덱스는 항상 정렬돼 있기 때문이다. DBMS는 일반적으로 B+Tree 인덱스 사용한다. (루트+브랜치+리프) 루트와 브랜치 블록에는 키 값을 갖지 않는 특별한 레코드 존재한다. (이를 LMC라고 부른다.) LMC : 자식 노드 중 가장 왼쪽 끝에 위치한 블록 리프 블록에 저장된 각 레코드는 키값 순으로 정렬되어있고, ROWID (테이블 레코드를 가리키는 주소값)을 가짐 인덱스 키 값이 같을시 ROWID 순으로 정렬 2.1.3 인덱스 수직적 탐색, 2.1.4 인덱스 수평적 탐색 인덱스 탐색 과정 (1) 수직적 탐색 : 인덱스 스캔 시작지점을 찾는 과정 가장 처음에 인덱..
https://programmers.co.kr/learn/courses/30/lessons/42579 코딩테스트 연습 - 베스트앨범 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 programmers.co.kr 풀이 과정 문제를 보자마자 해시를 떠올렸다! 여러 장르들이 존재하는데 조건1) 에 의해 속한 노래가 많이 재생된 장르의 순서를 구해야한다. 그러기 위해 우선 장르를 키값으로 가지는 map을 만들었다. 그리고 이 map의 value값은 총 몇 번 재생되었는지를 나타내야하므로 plays 배열의 값을 더해주었다. for(int i=0;ifirst,it->second..
문제 설명 아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다. 12 = 5 + 5 + (5 / 5) + (5 / 5) 12 = 55 / 5 + 5 / 5 12 = (55 + 5) / 5 5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우는 4입니다. 이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 return 하도록 solution 함수를 작성하세요. 제한사항 N은 1 이상 9 이하입니다. number는 1 이상 32,000 이하입니다. 수식에는 괄호와 사칙연산만 가능하며 나누기 연산에서 나머지는 무시합니다. 최솟값이 8보다 크면 -1을 return 합니다. 입출력 예 N number return 5 1..
문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 0초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오. 입력 첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다. 출력 수빈이가 동생을 찾는 가장 빠른 시간을 출력한다. 예제 입력 1 5 17 예제 출력 1 2 풀이 과정 1) BFS로 쉽..