개발 127

[C++] 두 정수 사이의 모든 합 구하기

어제 올린 글에는 최적화를 생활화하자는 글을 썼었는데, 오늘은 반대로 최적화를 잘못하면 화를 부를 수 있다는 것을 정리해보고자 한다ㅋㅋㅋㅋ 1. 문제 두 정수 사이의 모든 합을 구하는 것이다. 3, 5를 입력받으면 3 + 4 + 5 를 한 결과를 출력하면 됨. 작은 수부터 입력 받는다고 가정하자. 2. 알고리즘 가장 먼저 생각할 수 있는 알고리즘은 입력 받은 수부터 두번째 입력 받은 수 까지 반복문 돌리면서 더하는 것이다. 반복문을 좀 줄여본다면??? 1 + 2 + 3 + 4 + 5 + 6 를 보면 규칙을 찾을 수 있다. 1 + 6 = 7 2 + 5 = 7 3 + 4 = 7 이것을 이용하면, 포문을 반으로 줄일 수 있다! 여기서 잠깐, 더할 수의 개수가 홀수이면 이렇게 된다. 1 + 2 + 3 + 4 +..

[JAVA] 소수 구하기 최적의 알고리즘 (1)

한달 전에 면접에서 소수를 손코딩하라는 명을 받았다. (인성면접이라는 훼이크에 당해버렸음 @_@) 소수에 대해서는 깊이 생각해본적이 없었는데..이번일을 계기로 더더욱 최적의 방법을 생각하는 버릇을 들이겠다는 다짐을 하게되었다. 1. 소수(Prime Number)란 무엇인가? 2, 3, 5, 7, 11, 13, 17.... 약수가 1과 자기 자신 뿐인 수이다. 2. 소수를 어떻게 구할까? (알고리즘) 약수가 1과 자신뿐인 것을 확인해야한다. 그러려면??? 즉, 자기 자신보다 작은 수들을 나누어봐서, 하나라도 나누어지면 소수가 아닌 것이다.(어떤 수의 배수이면 안된다는 것) 보통은 여기까지만 생각하고 코딩을 시작할 것이다.그런데 조금만 더 생각해보면 더 좋은 방법이 있다. 일단은 이대로 코딩을 시작해봄 ㄱㄱ..

[Spring MVC + Maven] Project 생성하기

맨날 시니어개발자분들이 만든 환경에서만 개발해봤지 혼자 해본적이 없어서세팅을 해봤는데, 패키지 설계부터 뭘 어떻게 해야할지 막막했다. 프로젝트 만드는거에서부터 삽질을 했다 그래서 정리를 해보겠다.(MAC환경에서 했으나 다를건 없을 것이다) 환경 세팅 1. STS 다운로드 STS에는 메이븐 플러그인이 기본으로 깔려있으므로 이걸로 설치. http://spring.io/tools/sts/all 2. Tomcat 다운로드 원하는 버전의 톰캣 다운로드. (나는 7을 받았음) http://tomcat.apache.org/download-70.cgi 이제 본격적으로 프로젝트 생성하기 위에있는 동그라미 아이콘을 누른 후(Dashboard) Spring Project를 클릭한다. 아래와 같은 창이 뜨면, 프로젝트 이름 ..

개발/Spring 2013.09.20

[maven] open 라이브러리들 프로젝트에 추가하는 법

아래 사이트 가서 http://mvnrepository.com/plugins.html 원하는 라이브러리를 검색하면버전들이 쫙 나타난다. 원하는 버전을 클릭한 후 maven 탭에 있는 내용들을 쫙 복사해서 org.springframeworkspring-orm3.2.4.RELEASE pom.xml에 추가해놓으면 끝 라이브러리의 저장된 로컬 위치는c:\사용자\사용자명\.m2\repository 안에 패키지 구조에 따라 들어있다.

개발/ETC 2013.09.13

[JAVA] Insertion Sort (삽입정렬)

1. Insertion Sort 개념 아래와 같은 순서로 카드가 놓여져 있다고 생각해보자. 4 5 3 2 (1)4 5 3 2 2번째부터 기준이 되어 시작한다. (왼쪽과 비교해야 하므로 2번째부터 시작한다)기준인 5와 그 왼쪽인 4를 비교하니 5가 더 크므로 냅둔다. 4 5 3 2 이 알고리즘은 특성상, 기준의 왼쪽 값들은 모두 정렬이 되어있다. (2)4 5 3 2 그 다음 기준은 3번째가 되었다.바로 왼쪽 값과 비교한다. 3이 5보다 작기에, 큰 값인 5를 기준 자리에 밀어 넣는다.(여기서 회색부분은 비어있는 자리라고 생각하면 됨) 4 5 2 3 이번엔 기준과, 그 왼쪽인 4와 비교한다. 기준값이 4보다 작으므로, 위에서처럼 4를 오른쪽으로 밀어 넣는다. 4 5 2 이제 비교대상이 없어졌으므로 비어있는 ..

C++ 의 virtual 함수. 가상화. JAVA랑 C++의 차이점

가상화에 대해서 검색해보다가 사소하게 생각하며 지나친 부분에대해 새로이 알게됐다.C++에 있는 virtual 키워드의 용도, 그리고 JAVA와의 차이점을 알게 되었다. 1. C++에서의 상속 class Parent { public : Parent(){}; ~Parent() {}; void foo() { std::cout > parent!!! Parent* p = new Child(); 이 것을 통해 불려진 foo함수에서, child의 foo가 아닌 parent의 foo가 호출되는 것을 볼 수 있다.이유는, 컴파일러가 포인터의 타입을 보고 타입에 맞는 메소드를 찾아주기 때문이다. 그러나, 부모의 foo 메소드 앞에 virtual 이라는 키워드를 붙인다면???부모가 아닌 child의 foo 메소드가 호출된다..

개발/JAVA 2013.07.26

[JAVA] 재귀 - 이진트리(Binary Tree)의 순회

앞에 글에서 이진탐색트리의 삽입을 구현했었다. 이진탐색트리 삽입 (1) - http://marobiana.tistory.com/81이진탐색트리 삽입 (2) - http://marobiana.tistory.com/82 이번에는 순회에 대해 짜볼 것이다.사실 이걸 정리하고 싶었을 뿐인데, 이진탐색트리 삽입이 더 복잡해서 거기서 시간 다보냄 ㅎㅎ 요번건 소스가 아주 간단함. 1. 이진트리 순회 방법컴공 2학년 때 자료구조에서 배우는 요것.. 순회 방법에는 3가지가 있다.각 순회방법으로 갔을 때 순서를 적어보겠다. - Pre order (전위) : Root부터 왼쪽 모든 노드 탐색 후 오른쪽 24 15 2 19 28 27 30 - In order (중위) : 맨 왼쪽 아래노드부터 Root, 오른쪽 2 15 19..

[JAVA] 재귀 - 이진 탐색 트리(Binary Search Tree)의 삽입 - (2)

앞에 글에 이어서.. 앞 글 - http://marobiana.tistory.com/81 문제 : 트리에 넣을 숫자들을 입력 받아 이진탐색트리를 만들어라. 3. 예제 C++로 하면 포인터 써서 눈에 보기 더 좋을 것을ㅠㅠ Java로 포인터처럼 짜봤음 ㅋㅋ아래와 같이 3개의 클래스로 구성할 수 있음. 트리 삽입참고로, Tree에 넣는 숫자 순서가 트리모양을 결정한다public class BinarySearchTree { public static void main(String[] args) {Tree tree = new Tree();tree.addNode(24);tree.addNode(15);tree.addNode(19);tree.addNode(2);tree.addNode(28);tree.addNode(27..

[JAVA] 재귀 - 이진 탐색 트리(Binary Search Tree)의 삽입 - (1)

1. 이진트리, 이진탐색트리란? 각 노드의 자식노드 수가 최대 2개까지만 존재하는 트리이다.글로만 쓰면 이해가 안가므로, 그림 투척!위의 트리는 맨 밑 노드(리프노드 - Leaf Node)를 제외한 모든 각 노드가 자식노드를 2개씩 갖고있는데, 이런 트리를 완전트리 라고 한다. 완전트리가 아니더라도 자식노드가 2개 이하이면 이진트리이다. 아래 트리처럼!!요런 모양을 편향트리? 왼쪽 경사 트리? 변질 트리? 등으로 부른다.어쨌든, 이진트리에 대한 정의는 이정도이다. 그렇다면, 이진탐색트리(Binary Search Tree)는 무엇인가? 저 위의 그림들이 바로 이진탐색트리이다. 위에 있는 트리를 보면 숫자가 들어있다.루트노드의 왼쪽 아래에는 루트보다 작은 숫자가, 루트노드의 오른쪽 아래에는 루트보다 큰 숫자..

[JAVA] 재귀 기초 - 피보나치 (Fibonacci)

재귀에 대한 이해도가 전혀 없다면 http://marobiana.tistory.com/79 fibo(2-2) + fibo(2-1) else문의 첫번째 메소드인 fibo(2-2)가 호출 된다. 3) fibo(2-2)n은 0이므로 if문에서 0리턴하고 종료 fibo(2-2) + fibo(2-1) => 0 + fibo(2-1) 4) 스택에 있던 fibo(2)로 다시 돌아가서, fibo(2-1)이 실행된다.n이 1이므로 1을 리턴하고 종료된다. 5) 스택에 있던 fibo(2)에서는 fibo(2-2) + fibo(2-1) => 0 + 1 else문에서 각각 리턴된 0과 1을 더한 1을 리턴하고 종료된다. 현재, 아래와 같이 출력된 상황임. 11 6) main 함수에서는 i는 3이 되어, fibo(3)이 호출된다...