Strong Root



https://kotlinlang.org/docs/tutorials/getting-started-eclipse.html


공식 가이드에 IntelliJ, Eclipse 이렇게 2개의 IDE 가 소개되어있다.


그렇다면 익숙한 Eclipse 로 !




상세는 공식 가이드를 참조하면 된다. 아주 간단하다.


1. 기존 Eclipse 에 Kotlin Plugin 설치 : Marketplace 에 검색하면 바로 나옴

2. Perspective 를 Kotlin 으로 변경

3. New - Kotlin Project

4. 생성된 프로젝트의 src 폴더 우클릭하여 New - Kotlin File


이렇게만 하면 된다.




But, 가이드를 그대로 따라한 후 Run as Kotlin Application 시 에러가 발생한다;;


"kotlin_bin which is referenced by the classpath, does not exist."



말그대로 kotlin_bin 을 못찾아서 나는 에러이다.


해결법은


1. 프로젝트 우클릭하여 Properties - Resource - Linked Resources 에서 Linked Resources 탭 선택

2. kotlin_bin 의 Location 을 본인 eclipse 의 workspace 폴더로 지정한다. 프로젝트 폴더 말고 workspace 폴더 루트. ex) C:\Users\CGun\eclipse-workspace

3. Apply and Close 클릭하면 끝





But2, Eclipse 를 쓰지 않는 것이 좋다. 기본적인 Ctrl + Space 가 거의 지원되지 않는다. 완성도가 떨어짐.


IntelliJ 버전 중 Community 버전은 무료이므로 이걸 매우매우 권장합니다.











에러해결 출처 : https://discuss.kotlinlang.org/t/in-the-eclipise-running-lib-cant-find-the-kotlin-bin/6188/2


난이도 ★★


문제를 보시려면 여기를 클릭





문제 요약

 최종적으로 몇 마리의 물고기가 살아남는지 리턴하기


 1. A.length 가 물고기의 숫자이다.

 2. index 가 각 물고기 번호인데, index 가 작을수록 강의 상류에 있다.

 3. A[index] 는 각 물고기의 크기이며, 큰 녀석이 작은 녀석을 만나면 잡아먹는다.

 4. B[index] 는 각 물고기의 방향이며, 0 은 상류로 가는 방향, 1 은 하류로 가는 방향이다.

 5. 모든 물고기의 속도는 같다. (즉, 같은 방향끼리는 못 만난다)





힌트

 Stack 을 써야한다. 왜 써야하는지 깨달으면 절반 이상은 푼 것이다.

 (B[index] == 1 인 녀석들을 Stack 에 넣자)





이하는 코드입니다.


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
32
33
34
35
36
37
38
39
public int solution(int[] A, int[] B) {
    int aliveCount = 0;
    Stack<Integer> downFishes = new Stack<>();
    
    for (int i = 0; i < A.length; i++) {
        if (B[i] == 0) {    // up fish
            aliveCount++;
            
            if (downFishes.isEmpty()) {
                continue;
            }
            
            int downFish = downFishes.peek();
            
            while (true) {
                aliveCount--;
                
                if (A[downFish] < A[i]) {
                    downFishes.pop();
                    
                    if (downFishes.isEmpty()) {
                        break;
                    }
                    
                    downFish = downFishes.peek();
                }
                else {
                    break;
                }
            }
        }
        else {    // down fish
            downFishes.add(i);
            aliveCount++;
        }
    }
    
    return aliveCount;
}
cs

난이도 ★★☆☆


문제를 보시려면 여기를 클릭





문제 요약

 괄호의 짝이 정상적으로 맞는지를 리턴. 단, 빈 문자열 입력시에도 정상이라고 리턴할 것





힌트

 Stack 을 이용하는 전형적인 문제


 1. 여는 괄호 (, {, [ 는 push

 2. 닫는 괄호 ), }, ] 는 pop

 3. stack 이 비어있을 때 pop 하면 에러 발생함. 주의할 것





이하는 코드입니다.


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
32
33
34
35
36
public int solution(String S) {
    Stack<Character> stack = new Stack<>();
    
    for (int i = 0; i < S.length(); i++) {
        char c = S.charAt(i);
        
        if (c == '(' || c == '{' || c == '[') {
            stack.push(c);
        }
        else {
            if (stack.isEmpty()) {
                return 0;
            }
            
            char lastC = stack.pop();
            
            if (c == ')' && lastC != '(') {
                return 0;
            }
            
            if (c == '}' && lastC != '{') {
                return 0;
            }
            
            if (c == ']' && lastC != '[') {
                return 0;
            }
        }
    }
    
    if (!stack.isEmpty()) {
        return 0;
    }
    
    return 1;
}
cs

1. 공간 복잡도 (Space complexity)


이전 이전 글에..




2. 시간 복잡도 (Time complexity)


이전 글에..




3. 빅오 표기법 (Big-O notation)


복잡도를 표현하는 단위입니다.


거리의 단위에 km 가 있고, 무게의 단위에 kg 이 있듯


복잡도의 단위로는 O 가 있습니다.



공간 복잡도와 시간 복잡도 둘 다에 사용되며


최악의 경우를 가정하여 나타냅니다.



최악이 무슨 말인지 아래 예시를 보여드리겠습니다.


1
2
3
4
5
6
7
8
9
public boolean contains(int[] arr, int num) {
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == num) {
            return true;
        }
    }
 
    return false;
}
cs


위 함수의 경우, 운이 좋으면 한번만에 찾아서 return true가 될 수도 있고,


운이 최악이면 arr 전체를 다 뒤져야할수도 있습니다.


Big-O 는 이 최악을 가정하여 나타내므로


O(n) 이 위 함수의 시간 복잡도입니다.


n 은 뭐냐면 입력받은 배열의 길이를 뜻합니다.





또 특이한 점은 상수는 간소화한다는 것입니다.


O(k * 1)  =>  O(1)

O(k * n)  =>  O(n)

O(n + k)  =>  O(n)

O(k * n제곱)  =>  O(n제곱)



아래 함수를 예로 들겠습니다. (함수 내용 이해할 필요 없음)



시간 복잡도는 "2n + 2" 이지만 (n + n + 2)


Big-O 표기법으로는 O(n) 입니다.



공간 복잡도는 "n + 3" 이지만 (checked, i  =>  n + 2 + 1)


Big-O 표기법으로는 O(n) 입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public int solution(int[] A) {
    boolean[] checked = new boolean[A.length + 2];
 
    for (int i = 0; i < A.length; i++) {
        checked[A[i]] = true;
    }
 
    for (int i = 1; i < checked.length; i++) {
        if (!checked[i]) {
            return i;
        }
    }
 
    return -1;
}
cs