2016년 5월 31일 화요일

[Algorithm] Codility Lesson 4 Counting Elements - MissingInteger

 함수 작성:
 class Solution { public int solution(int[] A); }
 N개의 정수로 구성된 배열 A가 주어지고, A에 없는 가장 작은 양수 (0보다 큰)를 리턴한다.

 예를들어
 A[0] = 1
 A[1] = 3
 A[2] = 6
 A[3] = 4
 A[4] = 1
 A[5] = 2
 가 주어지면 함수는 5를 리턴해야 한다.

 가정:
 N 은 [1..100,000] 범위의 정수
 배열 A의 각 요소는  [−2,147,483,648..2,147,483,647] 범위의 정수

 복잡도:
 최악의 시간복잡도는 O(N);
 최악의 공간복잡도는 O(N) (입력 공간 제외)
 배열의 요소들은 수정될 수 있다.






https://codility.com/demo/results/trainingR78BM7-68F/

2016년 5월 30일 월요일

[Algorithm] Codility Lesson 4 Counting Elements - PermCheck

정수 N개로 구성된 비어있지 않은 배열 A가 주어진다.
permutation이란 1부터 N까지 각 요소를 단 한 번만 포함하는 숫자들이다.

예를들어 배열 A가 다음과 같다면:
A[0] = 4
A[1] = 1
A[2] = 3
A[3] = 2
permutation이다. 하지만 배열 A가 다음과 같다면:
A[0] = 4
A[1] = 1
A[2] = 3
permutation이 아니다. 왜냐하면 2가 빠졌기 때문이다.

목표는 배열 A가 permutation인지 아닌지 확인하는 것이다.

함수 작성:
class Solution { public int solution(int[] A); }
배열 A가 주어지고, 배열 A가 permutation이라면 1을 리턴 아니면 0을 리턴한다.

예를들어 배열 A가 다음과 같다면
A[0] = 4
A[1] = 1
A[2] = 3
A[3] = 2
함수는 1을 리턴해야한다.

배열 A가 다음과 같다면:
A[0] = 4
A[1] = 1
A[2] = 3
함수는 0을 리턴해야한다.

가정:
N은 [1..100,000] 범위의 정수이다.
배열 A의 각 요소는 [1..1,000,000,000] 범위의 정수이다.

복잡도:
최악의 시간복잡도는 O(N);
최악의 공간복잡도는 O(N) (입력공간 제외)
입력 배열의 요소는 수정할 수 있다.





https://codility.com/demo/results/trainingWXN3W6-5WB/

2016년 5월 29일 일요일

[Algorithm] Codility Lesson 4 Counting Elements - FrogRiverOne

작은 개구리는 강의 반대편으로 가고 싶어 한다.
개구리는 처음에 강 둑 한 곳(위치 0)에 위치해 있고 반대쪽 둑(위치 X+1)으로 가고 싶어 한다.
잎들은 나무에서 강 표면으로 떨어진다.

떨어진 잎을 표현하는 N 개의 정수로 이루어진 배열 A가 주어진다.
A[K]는 K초에 떨어지는 잎의 위치를 표시한다.

목표는 개구리가 강의 반대편으로 점프할 수 있는 가장 빠른 시간을 찾는것이다.
개구리는 1부터 X 위치 까지 강을 건너는 동안 잎이 나타날 때만 이동할 수 있다.
(우리는 잎이 있는 위치만으로 1부터 X까지 이동하는 가장 빠른 시간을 찾기 원한다는 것이다.)
강에 있는 동안의 속도는 무시할 만큼 작다고 가정할 것이다.
즉 잎은 강에 떨어진 후에 위치가 변하지 않는다.

예를 들어 정수 X = 5 이고 배열 A가 다음과 같다면
A[0] = 1
A[1] = 3
A[2] = 1
A[3] = 4
A[4] = 2
A[5] = 3
A[6] = 5
A[7] = 4
6초에 잎이 위치 5에 떨어진다.
이것이 잎이 강을 가로 지르는 모든 위치에 나타나는 가장 빠른 시간이다.

함수 작성:
class Solution { public int solution(int X, int[] A); }
N개의 정수로 구성된 비어있지 않은 배열 A와 정수X가 주어지면
개구리가 강의 반대편으로 점프할 수 있는 가장 작은 시간을 리턴한다.

만약 개구리가 강의 반대편으로 점프할 수 없다면, 함수는 -1을 리턴해야 한다.

예를들어 정수 X = 5 이고 배열 A가 다음과 같다면
A[0] = 1
A[1] = 3
A[2] = 1
A[3] = 4
A[4] = 2
A[5] = 3
A[6] = 5
A[7] = 4
위에서 설명한 것처럼 함수는 6을 리턴해야한다.

가정 :
N 과 X는 [1..100,000] 범위의 정수;
A의 모든 요소는 [1..X] 범위의 정수이다.

복잡도 :
최악의 시간복잡도는 O(N);
최악의 공간복잡도는 O(X) (입력 공간 제외)
배열의 모든 요소는 수정 가능하다.





https://codility.com/demo/results/training9GNH47-G8Z/

2016년 5월 25일 수요일

[Algorithm] Codility Lesson 3 - PermMissingElem

배열 A는 N개의 각기 다른 정수로 구성된다.
배열은 [1..(N + 1)] 범위의 정수를 포함하며, 단 하나의 요소만 빠져있다. 목표는 빠진 요소를 찾는 것이다.

함수 작성 :
class Solution { public int solution(int[] A); }
배열 A를 받아서, 빠진 요소를 리턴한다.

예를 들어 배열 A 가 다음과 같다면:
A[0] = 2
A[1] = 3
A[2] = 1
A[3] = 5
함수는 빠진 요소인 4를 리턴 할 것이다.

가정 :
N은 [0..100,000] 범위의 정수;
A의 요소는 모두 다르다.
A의 각 요소는 [1..(N + 1)] 범위의 정수이다.

복잡도:
최악의 경우 시간복잡도는 O(N);
최악의 경우 공간복잡도는 O(1), 입력 받을 공간 제외
입력받은 배열의 요소는 수정될 수 있다.





https://codility.com/demo/results/trainingB3DXRP-WUF/

2016년 5월 23일 월요일

[Algorithm] Codility Lesson 3 - TapeEquilibrium

 비어있지 않은 배열 A는 N개의 정수로 구성되어 있다. 배열 A는 테잎의 숫자들을 나타낸다.

 0 < P < N 인 정수 P는 테잎을 비어있지 않은 두 파트로 나눈다:
 A[0], A[1], ..., A[P − 1], A[P], A[P + 1], ..., A[N − 1].

 두 파트간의 차이 값을 구하는 식은 :
 |(A[0] + A[1] + ... + A[P − 1]) − (A[P] + A[P + 1] + ... + A[N − 1])|

 다시 말하면, 첫 파트의 합계와 두번째 파트의 합계 차이값의 절대값이다.

 예를 들어 다음과 같은 배열 A가 있다면:
 A[0] = 3
 A[1] = 1
 A[2] = 2
 A[3] = 4
 A[4] = 3

 4가지 방법으로 나눌 수 있다.:
 P = 1, 차이 = |3 − 10| = 7
 P = 2, 차이 = |4 − 9| = 5
 P = 3, 차이 = |6 − 7| = 1
 P = 4, 차이 = |10 − 3| = 7

 함수 작성:
 int solution(int A[], int N);

 N 개의 정수로 구성된 비어있지 않은 배열 A, 차이값의 최소값을 리턴한다.

 예를 들어
 A[0] = 3
 A[1] = 1
 A[2] = 2
 A[3] = 4
 A[4] = 3
 가 주어진다면, 상술 한 바와 같이 함수는 1을 리턴하게 된다.

 가정:
 N 은 [2..100,000] 범위의 정수
 배열의 각 요소는 [−1,000..1,000] 범위의 정수

 복잡도 :
 최악의 시간복잡도는 O(N)
 최악의 공간복잡도는 O(N) (입력값을 위한 공간 제외)
 배열의 요소는 수정 가능하다.



https://codility.com/demo/results/trainingVW44CT-URM/

2016년 5월 20일 금요일

[Algorithm] Codility Lesson 3 - FrogJmp



작은 개구리는 길을 건너고 싶어한다. 개구리는 현재 X 위치에 있고 Y 보다 같거나 큰 위치로 이동하길 원한다. 개구리는 항상 고정된 D 거리 만큼을 점프한다.

작은 개구리가 목적을 달성할 수 있는 가장 작은 점프 횟수를 구해라.

함수는 X, Y, D 세 개의 int 파라미터가 주어지고, X에서 Y보다 같거나 큰 위치로 이동시 가장 작은 점프 횟수를 리턴하도록 작성

예를 들어
 X = 10
 Y = 85
 D = 30
 가 주어진다면 개구리가 아래처럼 이동하기 때문에 리턴은 3이다.
 첫 점프 후 위치는     10 + 30 = 40
 두 번째 점프 후 위치는   10 + 30 + 30 = 70
 세 번째 점프 후 위치는  10 + 30 + 30 + 30 = 100

 가정 :
 X, Y, D 는 [1..1,000,000,000] 범위의 정수;
 X ≤ Y.

 복잡성 :
 최악의 시간 복잡도는 O(1).
 최악의 공간 복잡도는 O(1).


https://codility.com/demo/results/trainingWDWBJC-B3J/

[Bootstrap] 버튼 로딩 효과 / button loading


<button type="button" id="myButton" data-loading-text="Loading..." class="btn btn-primary" autocomplete="off">
  Loading state
</button>

<script>
  $('#myButton').on('click', function () {
    var $btn = $(this).button('loading');
    // business logic...
    $btn.button('reset');
  })
</script>






참고 :
http://getbootstrap.com/javascript/#buttons

2016년 5월 19일 목요일

[Algorithm] Codility Lessons

Lesson 1 / Iterations
- https://codility.com/demo/results/trainingBFYF8S-38C/


Lesson 2 / Arrays

1. CyclicRotation
- https://codility.com/demo/results/training94SFQB-X5K/

2. OddOccurrencesInArray
- https://codility.com/demo/results/training8547WH-RU7/





2016년 5월 2일 월요일

[Spring Boot] Building a RESTful Web Service 가이드

가이드에 따라 진행해보자


http://spring.io/guides/gs/rest-service/
==================================================








http://spring.io/guides/gs/sts/
Spring Tool Suite (STS) 이용하려면 위 페이지 스샷을 참고하고 마지막 프로젝트 템플릿 중 Consuming Rest 대신 Rest Service를 선택하면 된다.


선택하고 나면 두 개의 프로젝트가 생기게 되는데
gs-rest-service-initial 프로젝트는 초기화 된 상태의 프로젝트고
gs-rest-service-complete 프로젝트는 가이드를 완료한 결과 상태의 프로젝트이다.




따라서 gs-rest-service-initial 에 아래 코드를 작성하면 된다.




출력 될 데이터 형태를 정의한 Greeting.java 클래스를 작성한다.
package hello;

public class Greeting {

    private final long id;
    private final String content;

    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }
}


컨트롤러인 GreetingController도 작성 한다.
package hello;

import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
        return new Greeting(counter.incrementAndGet(),
                            String.format(template, name));
    }
}


마지막으로 어플리케이션을 실행할 수 있도록 해주는 Application.java 를 작성한다.
package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}


스프링을 사용해 봤다면 크게 새로운것은 없다.




필요한 항목은 모두 작성 되었고 실행은 STS 상에서 간단히 가능하다.
(프로젝트 우클릭 -> Run As -> Spring Boot App)




서버 구동 후
http://localhost:8080/greeting?name=User 접속시


{"id":2,"content":"Hello, User!"}
형태로 출력된다면 정상적으로 완료 된 것이다.



완료 소스 :