• Home

My Codegate

  • Home

프로그래머스 기능개발 자바 문제풀이

2023/12/12 Posted by Codegate Java No Comments
프로그래머스 기능개발 자바 문제풀이

문제 링크

문제 내용은 현재 진행된 퍼센트를 나타내는 progresses 배열과 일별 진행되는 speeds 배열을 받아 왼쪽부터 100에 도달하면 해당 일자에 완료된 갯수를 합쳐서 배열에 담아놓은 뒤 progresses 배열이 다 진행되고 나면 return 시켜주면 되는데, 주의할 점은 progresses 배열의 0번 인덱스가 완료됐으면, 1,2,3 번 인덱스도 100이 넘을 경우 한번에 뽑아낼 수 있지만

0번 인덱스가 완료됐지만, 1번 인덱스가 완료되지 못했을 경우, 2,3번 인덱스는 완료됐다 하더라도 빼낼 수 없다.

import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;

public class FunctionDevelop {
  public static int[] solution(int[] progresses, int[] speeds) {
    int[] answer = {};
    Queue<Integer> queue = new ArrayDeque<>();
    LinkedList<Integer> completedList = new LinkedList<>();
    for (int i = 0; i < progresses.length; i++) {
      queue.add(i);
    }

    int day = 1;
    while (!queue.isEmpty()) {
      int count = 0;
      if (progresses[queue.peek()] + (speeds[queue.peek()] * day) >= 100) {
        queue.poll();
        count++;
        while (true) {
          if (!queue.isEmpty()) {
            if (progresses[queue.peek()] + (speeds[queue.peek()] * day) >= 100) {
              queue.poll();
              count++;
            } else {
              break;
            }
          } else {
            break;
          }
        }
        completedList.add(count);
      }
      day++;
    }

    return completedList.stream().mapToInt(Integer::intValue).toArray();
  }

  public static void main(String[] args) {
    int[] pro = {95, 90, 99, 99, 80, 99};
    int[] speeds = {1, 1, 1, 1, 1, 1};
    System.out.println(Arrays.toString(solution(pro, speeds)));
  }
}

문제를 풀어보자면 progresses 배열을 더하거나 하는 등으로 변형시키면 로직이 많이 늘어나기 때문에
Queue에 progresses 배열의 인덱스를 차례대로 넣어준 후 while문을 돌리면서 진행시켜야 하는데

Queue에 progresses 배열의 인덱스를 넣어놓고, 하루가 지날 때마다 speeds 배열의 같은 인덱스를 꺼내와서 일별 변수와 곱한 값을 progresses 배열의 인덱스와 더해본 뒤 100 미만이라면 day를 늘려 나가야 하지만, 100 이상이라면 queue 에서 하나 빼고 다음 queue를 가지고 또 계산을 해본 뒤 100 이상이라면 queue에서 또 빼주고 횟수를 더하다가, 막히는 인덱스가 있으면 list에 해당 day에 queue에서 뺀 횟수를 넣어주면 된다.

이후 day를 늘려나가면서 list에 queue에서 빠진 횟수들을 모두 더해준 후 While문이 끝나면 list를 int[] 배열 형태로 바꿔서 반환하면 끝이다.

No Comments
0

Leave a Reply Cancel Reply

Introduction

My Codegate

Latest Posts

  • Google Search Console API 연동방법
  • 인텔리제이 Gradle Dependency 최신 버전 보는 방법
  • Wallet-Tracker 개발일지
  • Moralis API 자바로 호출방법
  • IntelliJ Commit 후 Push 따로 하는 방법

Categories

  • My Project (4)
  • Java (42)
  • Algorithm (161)
    • Java (152)
    • Algorithm Knowledge (3)
    • Algorithm site usage (6)
  • Vue.js (1)
  • Spring (4)
  • Docker (2)
  • IntelliJ (20)
  • Uncategorized (7)

Recent Comments

  • Codegate on Hello world!
  • A WordPress Commenter on Hello world!

© 2025 — mycodegate.com

Prev Next