IJY
느리더라도 꾸준히
IJY
전체 방문자
오늘
어제
  • 분류 전체보기 (67)
    • Develop (67)
      • Java (8)
      • Go (0)
      • Test (1)
      • Web (1)
      • HTML, CSS (1)
      • TIL(Today I Learned) (18)
      • SQL (0)
      • Algorithm (27)
      • 회고 (7)
      • Troubleshooting (1)
      • Etc (3)
    • Etc (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • init
  • Filter
  • PostConstruct
  • Interceptor
  • instance
  • 12921
  • web
  • REST Assured
  • 초기화
  • 회고
  • recursion
  • java
  • BufferedWriter
  • API 예외 처리
  • 소수 찾기
  • 백준
  • EntityTransaction
  • Spring
  • stream
  • 우테코 온보딩
  • sort
  • 독후감
  • object
  • html
  • 프로그래머스
  • Class
  • 재귀
  • BufferedReader
  • 알고리즘
  • MVC

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
IJY

느리더라도 꾸준히

Develop/Algorithm

프로그래머스 Lv.2 - 42586 기능개발

2022. 7. 26. 09:22

프로그래머스 Lv.2 - 42586 기능개발 문제 풀이

 

문제 설명

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.

또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.

먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.

 

문제의 자세한 내용은 해당 링크를 통해 확인 : 문제 링크

 

풀이 코드

import java.util.*;
import java.util.stream.Collectors;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int count = 1, passCount = 0;
        List<Integer> resultList = new ArrayList<>();
        Queue<Integer> progressQueue = Arrays.stream(progresses)
            .boxed()
            .collect(Collectors.toCollection(LinkedList::new));
        Queue<Integer> speedQueue = Arrays.stream(speeds)
            .boxed()
            .collect(Collectors.toCollection(LinkedList::new));
        
        while(!progressQueue.isEmpty()) {
            if((progressQueue.peek() + (speedQueue.peek() * count)) >= 100) {
                passCount += 1;
                progressQueue.poll();
                speedQueue.poll();
            } else {
                if(passCount > 0)
                    resultList.add(passCount);
                passCount = 0;
                count += 1;
            }
        }
        if(passCount > 0)
            resultList.add(passCount);
        return resultList.stream().mapToInt(i -> i).toArray();
    }
}

 

문제 해결 전략

이라 쓰고 문제를 보고서 어떻게 풀면 될까?에 대한 생각을 정리한 항목

바로 떠오른 해결 방법은 progresses 배열의 0번째 요소 값이 100 미만인 경우, 100 이상이 될 때까지 반복하면서 모든 요소의 인덱스에 맞는 speeds 배열의 요소 값을 더한 후 0번째 인덱스부터 요소의 값이 100 이상인 요소를 찾아 카운트를 하여 저장하는 방식을 떠올렸고, 이를 어떻게 구현하면 좋을까 고민하기 시작

간단하게 구현한다면 while문 내부에 for문을 사용하여 위 로직을 구현하면 되겠지만.. 2중 반복문을 사용하기 싫기에 다른 방법을 고민

단일 반복을 시키되 반복된 횟수를 기록하여 계산하면 될 것 같다는 생각에 구현 시작

반복 횟수를 기록하여 speeds 값에 곱한 수치를 더하여 100이 넘는지 확인을 해야 하기에 Queue를 사용하면 편할 것 같다는 생각을 하여 progresses 배열과 speeds 배열을 둘 다 Queue로 변환

이후 progresses 큐가 빈 큐가 될 때까지 반복하면서 계산 시작

만약 위 계산에서 100을 넘기는 경우가 발생하면 연속으로 100을 넘기는 경우가 있는지 카운트

100 이상이 아닌 경우가 발생한다면 지금까지 카운트 한 숫자를 반환할 list에 저장

progresses 큐가 빈 큐가 되어 while문을 나오게 될 때, 카운트(passCount)가 0이 아니라면 해당 값도 반환할 list에 저장

최종적으로 나온 list을 stream을 통해 int 배열로 변환하여 반환하여 해결


코드를 업로드해 둔 깃 허브

'Develop > Algorithm' 카테고리의 다른 글

프로그래머스 Lv.1 - 12921 소수 찾기  (0) 2022.10.23
백준 실버II - 11725 트리의 부모 찾기  (0) 2022.07.26
프로그래머스 Lv.1 - 77484 로또의 최고 순위와 최저 순위  (0) 2022.07.26
프로그래머스 Lv.1 - 12910 나누어 떨어지는 숫자 배열  (0) 2022.07.26
프로그래머스 Lv.1 - 92334 신고 결과 받기  (0) 2022.07.26
    'Develop/Algorithm' 카테고리의 다른 글
    • 프로그래머스 Lv.1 - 12921 소수 찾기
    • 백준 실버II - 11725 트리의 부모 찾기
    • 프로그래머스 Lv.1 - 77484 로또의 최고 순위와 최저 순위
    • 프로그래머스 Lv.1 - 12910 나누어 떨어지는 숫자 배열
    IJY
    IJY
    개발 관련 공부한 내용을 정리하는 블로그입니다. 느리더라도 꾸준히 포스팅을 하려고 노력합니다.

    티스토리툴바