[Stack/Queue] 기능개발

서은경·2022년 4월 8일
0

CodingTest

목록 보기
8/71
public static int[] solution(int[] progresses, int[] speeds) {
        int[] answer = {};
        int max_progress = 100;

        Queue<Integer> q = new LinkedList<>();

        for(int i=0; i< progresses.length; i++) {
            int open_days = (max_progress-progresses[i])/speeds[i];
            if((max_progress-progresses[i])%speeds[i]>0) open_days++;

            q.offer(open_days);
        }

        HashMap<Integer, Integer> hm = new HashMap<>();

        // 처음 오픈해야 하는 날짜 (poll로 빼줌)
        int days = q.poll();
        int d = 1;

        // 첫번째 기능 오픈
        hm.put(d, 1);

        while (!q.isEmpty()) {
            //System.out.println(days+" "+q.peek());

            if(days >= q.peek()) {
                hm.put(d, hm.getOrDefault(d, 0)+1);
                //System.out.println(">> "+d+" "+hm.get(d));
                q.poll();
            } else {
                d++;
                days = q.poll();
                hm.put(d, 1);
            }
        }

        System.out.println("====");
        answer = new int[hm.size()];
        for (Integer dd : hm.keySet()) {
            System.out.println(dd + " " + hm.get(dd));
            answer[dd-1] = hm.get(dd);
        }

        return answer;
    }

큐와 해시맵을 이용해서 통과!
첫번째 기능 오픈 날짜를 기준일자로 잡고 해시맵에 맨 처음 담은 후, 그 일자보다 이후일 때마다 기준일자를 갱신하고 해시맵에 새로 담았다. 큐가 비워질 때까지 반복문을 돌려 peek으로 비교할 날짜를 꺼내와서 오픈이 된 기능의 날짜들은 poll로 빼줬다.

Queue의 주요 기능

값 추가
add
offer

값 삭제
remove	해당 값을 비움
poll	맨 앞에 있는 값을 꺼내고 비움
clear	아예 큐를 비움

값 확인
poll	맨 앞에 있는 값을 꺼내고 비움
peek	맨 앞에 있는 값 출력

다른 사람 풀이 볼때마다 어떻게 이렇게 짤 수 있나 놀라우면서도 자괴감이 들면서도 ... 갈 길이 멀었다 !!!

0개의 댓글

관련 채용 정보