Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Tags
more
Archives
Today
Total
관리 메뉴

개발자이야기

카카오 알고리즘 테스트 호텔방 배정 본문

알고리즘

카카오 알고리즘 테스트 호텔방 배정

개발자가되고싶어 2020. 7. 20. 18:00
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
    public static long[] solution(long k, long[] room_number) {
        long[] answer = new long[room_number.length];
 
        long index = 0;
        for(long item : room_number) {
            long d = recu(item);
            answer[Math.toIntExact(index)] = d;
            index = index+1;
        }
 
        return answer;
    }
 
    static long recu(long me) {
       if(!hs.containsKey(me)) {
            hs.put(me, me+1);
            return me;
       } else {
           long d = recu(hs.get(me));
           hs.put(me, hs.get(d));
           return d;
       }
    }
 
위의 소스를 순차적으로 써보면
1번째 손님이 원하는 방인 1번 방은 재귀 함수로 진입하여 map key가 존재하지 않기때문에 key:1 val:2 로 저장한다
2번째 손님이 원하는 방도 마찬가지 key:3 val:4
3번째 손님이 원하는 방도 마찬가지 key:4 val:5
 
4번째 손님부턴 이미 방이 품절되었다. 내가 원하는 방보단 커야한다.
4번째 손님이 원하는 방인 1번방 재귀 함수로 진입한다 
    static long recu(long me) { <- 1진입
       if(!hs.containsKey(me)) { <- 이미 1번 키는 배정되어있다
            hs.put(me, me+1);
            return me;
       } else {
           long d = recu(hs.get(me)); <- hs.get(1) 원하는방 1 Key를 입력하여 value를 뽑는다 val:2 가 들어있다 재귀함수 재진입
           hs.put(me, hs.get(d));
           return d;
       }
    }
    static long recu(long me) { <- 2진입
       if(!hs.containsKey(me)) { <- 2번키는 배정되지 않았다
            hs.put(me, me+1); <-key:2 val:3 저장
            return me;
       } else {
           long d = recu(hs.get(me));
           hs.put(me, hs.get(d));
           return d;
       }
    }
 
5번째 손님도 원하는 3번방은 이미 품절된 상태다
 
    static long recu(long me) { <- 3진입
       if(!hs.containsKey(me)) { <- 이미 3번 키는 배정되어있다
            hs.put(me, me+1);
            return me;
       } else {
           long d = recu(hs.get(me)); <- hs.get(3) 원하는방 3 Key를 입력하여 value를 뽑는다 val:4 가 들어있다 재귀함수 재진입
           hs.put(me, hs.get(d)); <- 아래의 5번방에서 리턴 받은 5 값을 map에서 얻어와서 key가 3인 value도 5로 바꿔준다
           return d;
       }
    }
    static long recu(long me) { <- 4진입
       if(!hs.containsKey(me)) { <- 이미 4번 키는 배정되어있다
            hs.put(me, me+1);
            return me;
       } else {
           long d = recu(hs.get(me)); <- hs.get(4) 원하는방 4 Key를 입력하여 value를 뽑는다 val:5 가 들어있다 재귀함수 재진입
           hs.put(me, hs.get(d)); <- 아래의 5번방에서 리턴 받은 5 값을 map에서 얻어와서 key가 4인 value도 5로 바꿔준다
           return d;
       }
    }
    static long recu(long me) { <- 5진입
       if(!hs.containsKey(me)) { <- 5번방은 배정되지 않았다. 
            hs.put(me, me+1);
            return me; <- 5값을 return 하여 위의 4번방을 원했던 함수로 돌아간다.
       } else {
           long d = recu(hs.get(me));
           hs.put(me, hs.get(d));
           return d;
       }
    }
 
위를 반복한다. 
 
 
 
 
 
cs

'알고리즘' 카테고리의 다른 글

프로그래머스 가장 먼 노드  (0) 2021.09.05
프로그래머스 입국심사  (0) 2021.09.03
이분탐색 java  (0) 2020.07.21