[프로그래머스 고득점 Kit/Java] 기능개발

2025. 4. 2. 15:40· Languages/Java

 

깔깔

답지를 볼까 수많은 유혹의 생각들이 들었지만

보지 않고 스스로의 힘으로 해냈다

 

이렇게 발전해나가는 나..

제법 대견할지도?

 

각설하고,

문제를 풀어보자!

 

각 기능은 진도가 100%일 때 서비스에 반영할 수 있다.

또, 각 기능의 개발 속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있지만,

뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포된다.

 

배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와

각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때

각 배포마다 몇 개의 기능이 배포되는지를 return 하는 문제다.

 

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer = {};
        ArrayList<Integer> q = new ArrayList<>();
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < speeds.length; i++) {
            int num = (100 - progresses[i]) / speeds[i];
            if ((100 - progresses[i]) % speeds[i] != 0) {
                num++;
            }
            q.add(num);
        }
        
        int last = q.get(0);
        int index = 0;
        int cnt = 0;
        
        while(true) {
            if (index >= speeds.length) {
                list.add(cnt);
                break;
            }
            if (last < q.get(index)) {
                list.add(cnt);
                last = q.get(index);
                cnt = 0;
            } else {
                index++;
                cnt++;
            }
        }
        return list.stream().mapToInt(i->i).toArray();
    }
}

 

처음에는 queue를 사용해서

앞에서부터 하나씩 poll()할까 생각했지만,

queue는 index를 사용하지 못해서

내가 생각하는 방법에 적용할 수 없었고 arraylist로 변경했다.

 

먼저 배열에

(100 - progress(작업진도)) / speed(작업속도)를 넣어준다.

앞으로 100%가 될 때까지 며칠이 걸리는지를 나타낸다.

이때 주의해야 할 점은

만약 나머지가 있다면 올림해주어야 한다는 것이다.

 

그렇게 하고 last에 배열의 첫 번째 값을 저장,

index와 cnt는 0으로 초기화한 후

index를 마지막까지 돌며

다음 과정을 거친다.

 

- index가 배열 길이에 도달하면 마지막 cnt값을 list에 넣고 종료한다.

- last 값이 해당 index에 해당하는 배열 값보다 작으면

지금까지 쌓인 cnt값을 배열에 넣고, last를 해당 index의 값으로 바꾸고

cnt는 0으로 초기화한다.

- last 값이 해당 index에 해당하는 배열 값보다 크거나 같으면

함께 배포되어야할 친구들이므로 index와 cnt를 1씩 늘려주고

다음으로 넘어간다.

 

마지막에는 list를 int배열로 바꿔 출력하면 된다.

 

원래 생각한대로 queue를 사용한다면 어땠을까?

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        Queue<Integer> days = new LinkedList<>();
        
        for (int i = 0; i < progresses.length; i++) {
            int day = (100 - progresses[i]) / speeds[i];
            if ((100 - progresses[i]) % speeds[i] != 0) {
                day++;
            }
            days.add(day);
        }
        
        List<Integer> result = new ArrayList<>();
        int current = days.poll();
        int count = 1;
        
        while (!days.isEmpty()) {
            if (days.peek() <= current) {
                days.poll();
                count++;
            } else {
                result.add(count);
                current = days.poll();
                count = 1;
            }
        }
        result.add(count); // 마지막 묶음
        
        return result.stream().mapToInt(i -> i).toArray();
    }
}

'Languages > Java' 카테고리의 다른 글

[프로그래머스 고득점 Kit/Java] 더 맵게  (0) 2025.04.15
[BOJ 길라잡이/Java] 14일차 #9095 1, 2, 3 더하기  (0) 2025.04.06
[BOJ 길라잡이/Java] 13일차 #1182 부분수열의 합  (0) 2025.04.01
[프로그래머스 고득점 Kit/Java] 같은 숫자는 싫어  (0) 2025.04.01
[BOJ 길라잡이/Java] 12일차 #6603 로또  (0) 2025.03.29
'Languages/Java' 카테고리의 다른 글
  • [프로그래머스 고득점 Kit/Java] 더 맵게
  • [BOJ 길라잡이/Java] 14일차 #9095 1, 2, 3 더하기
  • [BOJ 길라잡이/Java] 13일차 #1182 부분수열의 합
  • [프로그래머스 고득점 Kit/Java] 같은 숫자는 싫어
효딩
효딩
개ㄱ발은 기세다. 줄여서 객기.
hyoding개ㄱ발은 기세다. 줄여서 객기.
효딩
hyoding
효딩
전체
오늘
어제
  • 분류 전체보기 (245)
    • SKKU SW (30)
      • Computer Architecture (14)
      • Database (4)
      • Computer Network (3)
      • Operating System (7)
      • Mobile App Programming (2)
    • SuperCoding (68)
    • CS (8)
    • Web Programming (19)
    • Cloud (13)
    • Languages (45)
      • Python (8)
      • Java (37)
    • Supporters (8)
      • MoteMote (6)
      • NHN Cloud (2)
    • Certification (27)
      • Network Advisor (14)
      • ADsP (10)
      • Engineer Information Proces.. (3)
    • Finance (9)
      • 경제금융용어 (3)
    • Woori FISA (14)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 서버배포
  • 앱개발
  • 네트워크관리사2급
  • nhn cloud
  • 서버생성
  • 네트워크관리사 커트라인
  • 인프라
  • 클라우드 서비스
  • 클라우드서비스개발
  • 우리fis아카데미
  • 우리FISA
  • rds local 접속
  • 네트워크관리사 준비물
  • 우리에프아이에스
  • 네트워크관리사 합격
  • apppaas
  • AWS
  • 네트워크관리사2급 필기
  • 네트워크관리사
  • 인프라개발
  • 글로벌소프트웨어캠퍼스
  • 클라우드
  • Kotlin
  • 네트워크관리사2급 공부방법
  • 코틀린
  • 네트워크관리사 후기
  • 서버개발
  • K-디지털트레이닝
  • 코틀린문법
  • 봐

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
효딩
[프로그래머스 고득점 Kit/Java] 기능개발
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.