프로그래머스 알고리즘 - 타겟넘버☞ 타겟 넘버 문제 링크 멱집합(모든 부분집합)을 구하는 방법을 응용하면 해당 문제를 풀기 수월 합니다. ☞ 멱집합(부분집합) 알고리즘 문제 풀이첫번째 주어진 숫자로 덧셈(+)을 계산하거나, 혹은 뺄셈(-)을 진행합니다.→ 두번째 주어진 숫자로 덧셈(+)을 계산하거나, 혹은 뺄셈(-)을 진행합니다.→ . . . → N번째 주어진 숫자로 덧셈(+)을 계산하거나, 혹은 뺄셈(-)을 진행합니다.N번째까지 계산한 결과가 타겟 넘버와 같다면 answer을 하나 증가 시킵니다. public class Solution { private static int answer = 0; public static void main(String[] args) { int[] numbers = {1, ..
JpaRepository JpaRepository 인터페이스를 상속 받는 것만으로도 웬만한 CRUD는 바로 사용 가능 했다. 아래와 같이 설정 한것 만으로도 save(), findAll(), delete(), exists() 등등의 메소드가 바로 사용가능했다. (굳이 오버라이딩 하듯이 메소드들을 명시할 필요도 없었다.) JpaRepository 인터페이스는 스프링 데이터의 CrudRepository를 상속받았기 때문에 CrudRepositry에 정의되어 있는 기능도 사용가능 했다. public interface QuestionRepository extends JpaRepository { } 쿼리 메소드 JPA의 Repositoy안에 find와 By 키워드를 적절히 섞은 쿼리 메소드만 선언하면 대부분의 조..
멱집합 알고리즘 멱집합은 한 집합의 모든 부분집합을 뜻합니다. 원소 a,b,c를 갖고 있는 집합의 모든 부분 집합은 (a, b, c, ab, ac, bc, abc + 공집합)으로 총 8가지 입니다. 탐색 (재귀, 브루트포스) 알고리즘 문제를 풀때 멱집합을 구하는 방법을 종종 사용하게 됩니다. 모든 부분집합의 경우의 수를 구하는 과정은 다음과 같습니다. 첫번째 원소가 포함이 되는가? 혹은 안되는가?→ 두번째 원소가 포함이 되는가? 혹은 안되는가? → . . . → N번째 원소가 포함이 되는가? 혹은 안되는가? 그래서 원소의 갯수가 N인 집합의 모든 부분집합의 갯수는 2^N개가 됩니다. 아래는 주어진 집합의 모든 부분집합을 출력하는 (java)코드입니다. 핵심부분은 위에서 설명한대로 n번째의 원소가 포함이 ..
예외 처리 방법 메소드를 만드는 개발자 입장에서 발생하는 예외를 처리하는 방법은 2가지가 있습니다. (자세한 문법적인 설명은 이 포스팅에서 하지 않습니다.) try - catch문을 사용하기메소드에 thorws 키워드로 예외 선언하기try-catch문을 이용하면 예외가 발생될 것 같은 지점에 직접 예외 처리를 할 수있고, throws를 사용하게 되면 메소드를 사용하는 쪽에서 예외에 대한 처리를 해주어야 합니다. 처음 예외 처리를 배웠을때, throws로 예외를 선언하는 것은 해당 메소드를 만든 개발자로써 무책임한 방법이라고 생각했습니다. 사용자를 편하게 하는 것이 객체지향 설계의 미덕이라고 배웠는데 번거로운 예외처리를 안하겠다는 것처럼 보였습니다. 하지만 이와 같은 생각은 '언제 어떤 방법을 사용해야 하..
Java 프로그램 연산 속도 계산하기 연산속도를 계산하기 위해서는 System.currentTimeMillis()나 System.nanoTime()을 이용합니다. 두 메소드는 UTC라는 시간 표준 체계를 따라 현재시간을 리턴해줍니다. 그래서 연산 속도를 측정하기 위해서 시작시간의 현재시간, 종료시간의 현재시간의 차를 이용하면 연산속도가 얼마인지 계산 해 낼 수 있습니다. currentTimeMillis는 ms로리턴하고(1/1,000초) JDK 5버젼 이상부터는 사용가능한 nanoTime는 ns(1,000,000,000초)로 리턴하니 가능하면 더 정확한 nanoTime을 사용하는게 좋습니다. String vs StringBuffer 연산 속도 비교해보기 String String을 이용하여서 "abcde"라..
재귀란 어떤 사건이 자기 자신을 사용하여 정의 될 때 재귀적(recursive)라고 합니다. 대표적인 예로 팩토리얼이 있습니다. (팩토리얼의 10!는 10x9!로 설명할 수 있다.) 재귀는 스택이다. 재귀 알고리즘이 어렵다고 느껴지는 이유 중 하나는 사람의 머리로 컴퓨터가 실행하는 재귀적 행동을 따라 갈 수 없기 때문입니다. 재귀 알고리즘을 보다 쉽게 상상하려면, 같은 함수가 호출 되는 것이 아니라, 복사된 함수가 호출 된다고 생각합니다.함수의 호출을 상상 할때는 스택(stack)으로 합니다. 함수 호출의 원리는 결국 스택으로 진행됩니다. 함수가 호출되면 기존 함수 스택 위에 호출된 함수가 쌓이게 되고, 더 이상 쌓을 함수(스택)이 없게 되면 위에서부터 차례대로 실행하게 됩니다. 재귀 알고리즘 문제 풀이..
JPA 조인(JOIN) 전략 엔티티(Entity)들 간의 관계가 맺어져 있다면, JPA는 조인(JOIN)을 이용해서 데이터베이스를 조회하게 됩니다. 조인전략중에 성능이 가장 좋은 조인 전략은 내부조인(INNER JOIN)입니다. 하지만 연관된 외래키가 null이 존재하는 경우에 내부조인을 사용할 경우 일부만 필터링을 해서 조회하는 문제가 생길 수 있습니다. 이러한 이유로 JPA는 외부조인(OUTER JOIN)을 기본설정으로 수행하게 됩니다. 내부조인 전략으로 변경하기 내부조인을 사용하고 싶다면 JPA에게 연관된 외래키에는 null이 존재하지 않음을 명시해주어야 합니다. 2가지 설정 방법중에 하나만 설정하면 됩니다. 참고로 @OneToMany와 @ManyToMany는 컬렉션으로 로딩해야 하므로 내부조인 설..
이 포스팅은 Udacity Git Commit Message Style Guide를 참고하여 작성 했습니다. ☞ Udacity Git Commit Message Style Guide 개요 git의 Commit Mesage (커밋 메시지)가 많이 누적 될 경우 가독성이 떨어지고 특히 여러 사람과 개발을 같이 할 때는 더욱 심각 해집니다. 협업하는 사람들 간의 커밋 메시지 스타일을 정해두면 서로간의 코드 리뷰의 도움이 될 뿐만 아니라, 자신의 이전 로그를 살펴보는 것에도 도움이 됩니다. 아래에서 설명할 내용은 Udacity의 깃 커밋 스타일 가이드입니다. 메시지 구조 커밋 메시지는 세가지 파트로 나누고 각 파트는 빈줄을 두어서 구분합나다. type: subject body(옵션) footer(옵션) type..