본문 바로가기

CodingTEST

[프로그래머스] 기능개발 (JAVA)

반응형

프로그래머스 - [Level 2]  기능개발

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 분석

 

  • 각 기능별로 작업 진도와 속도가 주어진다
  • 앞에 기능이 배포되야지만, 뒤에 기능을 배포 시킬 수 있다.
  • 이때, 각 배포마다 몇 개의 기능이 배포되는지 리스트로 만들어 리턴해라.

해결 키 포인트

 

  • 해시 맵 사용
    • key : index | value : 작업 진도
  • 완성되지 않은 최상단 작업의 인덱스를 변수로 제작
  • 최상단 작업의 완성도가 100인 경우, 해당 작업과 그 뒤에 이어진 기능의 작업 진도가 100을 안넘을 때까지 반복
  • 마지막 작업까지 다 끝날때까지 현재 index부터 끝까지 작업 진도를 속도만큼 증가

 

  • 이 외에도 스택/큐 사용 가능
    • 모두 큐에 삽입
    • 맨 앞이 작업진도가 100이 안넘으면 속도 증가시키기 (큐에 들어있는 개수만큼)
    • 100이 넘을 시, 큐에서 100이 넘지 않는 것이 맨 앞이 될 때까지 제거

코드

 

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        ArrayList<Integer> result = new ArrayList<>();
        HashMap<Integer, Integer> check = new HashMap<>();

        for (int i = 0; i < progresses.length; i++) {
            check.put(i, progresses[i]);
        }

        int index = 0;
        while(index < progresses.length) {
            if(check.get(index) >= 100) {
                int count = 0;
                for (int i = index; i < progresses.length; i++) {
                    int value = check.get(i);
                    if(value >= 100) {
                        count++;
                    }
                    else
                        break;
                }

                result.add(count);
                index = index+count;
            }

            for (int i = index; i < progresses.length; i++) {
                check.put(i, check.get(i) + speeds[i]);
            }
        }

        int [] answer = new int[result.size()];
        for (int i = 0; i < result.size(); i++) {
            answer[i] = result.get(i);
        }

        return answer;
    }
}
반응형

'CodingTEST' 카테고리의 다른 글

[백준 9465] 스티커(JAVA)  (0) 2024.02.11
[프로그래머스] 프로세스 (JAVA)  (0) 2024.02.10
[프로그래머스] 의상 (JAVA)  (0) 2024.01.20
[백준 1991] 트리 순회(JAVA)  (0) 2024.01.16
[백준 1932] 정수 삼각형(JAVA)  (0) 2024.01.16