μ•Œκ³ λ¦¬μ¦˜/ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[ Programmers ] κΈ°λŠ₯ 개발 ( μžλ°” / JAVA )

KIMHYEYUN 2022. 9. 1. 22:33
λ°˜μ‘ν˜•

 

https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ λ§€μΉ­. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 λ§€μΉ­ λ°›μœΌμ„Έμš”.

programmers.co.kr


문제

문제 μ„€λͺ…

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ νŒ€μ—μ„œλŠ” κΈ°λŠ₯ κ°œμ„  μž‘μ—…μ„ μˆ˜ν–‰ μ€‘μž…λ‹ˆλ‹€. 각 κΈ°λŠ₯은 진도가 100%일 λ•Œ μ„œλΉ„μŠ€μ— λ°˜μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
또, 각 κΈ°λŠ₯의 κ°œλ°œμ†λ„λŠ” λͺ¨λ‘ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— 뒀에 μžˆλŠ” κΈ°λŠ₯이 μ•žμ— μžˆλŠ” κΈ°λŠ₯보닀 λ¨Όμ € 개발될 수 있고, μ΄λ•Œ 뒀에 μžˆλŠ” κΈ°λŠ₯은 μ•žμ— μžˆλŠ” κΈ°λŠ₯이 배포될 λ•Œ ν•¨κ»˜ λ°°ν¬λ©λ‹ˆλ‹€.
λ¨Όμ € λ°°ν¬λ˜μ–΄μ•Ό ν•˜λŠ” μˆœμ„œλŒ€λ‘œ μž‘μ—…μ˜ 진도가 적힌 μ •μˆ˜ λ°°μ—΄ progresses와 각 μž‘μ—…μ˜ 개발 속도가 적힌 μ •μˆ˜ λ°°μ—΄ speedsκ°€ μ£Όμ–΄μ§ˆ λ•Œ 각 λ°°ν¬λ§ˆλ‹€ λͺ‡ 개의 κΈ°λŠ₯이 λ°°ν¬λ˜λŠ”μ§€λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜μ„Έμš”.

μ œν•œ 사항

  • μž‘μ—…μ˜ 개수(progresses, speedsλ°°μ—΄μ˜ 길이)λŠ” 100개 μ΄ν•˜μž…λ‹ˆλ‹€.
  • μž‘μ—… μ§„λ„λŠ” 100 미만의 μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  • μž‘μ—… μ†λ„λŠ” 100 μ΄ν•˜μ˜ μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  • λ°°ν¬λŠ” ν•˜λ£¨μ— ν•œ 번만 ν•  수 있으며, ν•˜λ£¨μ˜ 끝에 이루어진닀고 κ°€μ •ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μ§„λ„μœ¨μ΄ 95%인 μž‘μ—…μ˜ 개발 속도가 ν•˜λ£¨μ— 4%라면 λ°°ν¬λŠ” 2일 뒀에 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

progresses speeds return
[93, 30, 55] [1, 30, 5] [2, 1]
[95, 90, 99, 99, 80, 99] [1, 1, 1, 1, 1, 1] [1, 3, 2]

풀이

각 진행도λ₯Ό 100μ—μ„œ λΊ€ κ°’μœΌλ‘œ μ„ΈνŒ… ν›„, μ†λ„λ‘œ λ‚˜λˆ„μ–΄ λ‚˜λ¨Έμ§€κ°€ 0μ΄μ•„λ‹ˆλ©΄ λͺ«μ— + 1 κ°’μœΌλ‘œ, 0이라면 λͺ« κ°’μœΌλ‘œ μ„€μ •ν•΄μ€€λ‹€.
그리고 λ¨Όμ € 첫번째 값을 κΈ°μ€€μœΌλ‘œ μ„€μ •(dayOfPre)ν•΄μ„œ λ’€μ˜ 값듀이
dayOfPre보닀 μž‘κ±°λ‚˜ κ°™λ‹€λ©΄ → cntOfDay의 값을 += 1 ν•΄μ£Όκ³  계속 μ§„ν–‰,
보닀 크닀면 → cntOfDay값을 answer에 μΆ”κ°€ν•΄μ£Όκ³ , cntOfDay = 1, dayOfPre 값을 ν˜„μž¬ κ°’μœΌλ‘œ μ„ΈνŒ…ν•΄μ„œ μ§„ν–‰ν•΄μ€€λ‹€.


μ½”λ“œ

import java.util.ArrayList;
import java.util.List;

public class L2_κΈ°λŠ₯_개발 {
    public static int[] solution(int[] progresses, int[] speeds) {
        int[] remains = new int[progresses.length];
        for (int i = 0; i < progresses.length; i++) {
            remains[i] = 100 - progresses[i];

            if(remains[i] % speeds[i] == 0) remains[i] /= speeds[i];
            else remains[i] = remains[i] / speeds[i] + 1;
        }

        List<Integer> answer = new ArrayList<>();
        int cntOfDay = 1, dayOfPre = remains[0];
        for (int i = 1; i < remains.length; i++) {
            if (dayOfPre >= remains[i]) {
                cntOfDay += 1;
            } else {
                answer.add(cntOfDay);
                cntOfDay = 1;
                dayOfPre = remains[i];
            }
        }
        answer.add(cntOfDay);
        return answer.stream().mapToInt(Integer::intValue).toArray();
    }

    public static void main(String[] args) {
        int[] progresses = {95, 90, 99, 99, 80, 99};
        int[] speeds = {1, 1, 1, 1, 1, 1};

        int[] answer = solution(progresses, speeds);

        for(int a : answer) System.out.println(a);
    }
}

728x90
λ°˜μ‘ν˜•