λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Programmers lv-1

μ˜ˆμ‚° - Java [μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅]

by κ·€ν”Όν‚€ 2022. 12. 7.

 

❀️ Problem

더보기
  • 문제
    Sμ‚¬μ—μ„œλŠ” κ° λΆ€μ„œμ— ν•„μš”ν•œ λ¬Όν’ˆμ„ μ§€μ›ν•΄ μ£ΌκΈ° μœ„ν•΄ λΆ€μ„œλ³„λ‘œ λ¬Όν’ˆμ„ κ΅¬λ§€ν•˜λŠ”데 ν•„μš”ν•œ κΈˆμ•‘을 μ‘°μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜, μ „체 μ˜ˆμ‚°μ΄ μ •ν•΄μ Έ μžˆκΈ° λ•Œλ¬Έμ— λͺ¨λ“  λΆ€μ„œμ˜ λ¬Όν’ˆμ„ κ΅¬λ§€ν•΄ μ€„ μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ μ΅œλŒ€ν•œ λ§Žμ€ λΆ€μ„œμ˜ λ¬Όν’ˆμ„ κ΅¬λ§€ν•΄ μ€„ μˆ˜ μžˆλ„둝 ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

    λ¬Όν’ˆμ„ κ΅¬λ§€ν•΄ μ€„ λ•ŒλŠ” κ° λΆ€μ„œκ°€ μ‹ μ²­ν•œ κΈˆμ•‘λ§ŒνΌμ„ λͺ¨λ‘ μ§€μ›ν•΄ μ€˜μ•Ό ν•©λ‹ˆλ‹€. μ˜ˆλ₯Ό λ“€μ–΄ 1,000원을 μ‹ μ²­ν•œ λΆ€μ„œμ—λŠ” μ •ν™•νžˆ 1,000원을 μ§€μ›ν•΄μ•Ό ν•˜λ©°, 1,000원보닀 μ μ€ κΈˆμ•‘을 μ§€μ›ν•΄ μ€„ μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

    λΆ€μ„œλ³„λ‘œ μ‹ μ²­ν•œ κΈˆμ•‘μ΄ λ“€μ–΄μžˆλŠ” λ°°μ—΄ d와 μ˜ˆμ‚° budget이 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ΅œλŒ€ λͺ‡ 개의 λΆ€μ„œμ— λ¬Όν’ˆμ„ 지원할 수 μžˆλŠ”μ§€ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

  • μ œν•œ 사항
    • dλŠ” λΆ€μ„œλ³„λ‘œ μ‹ μ²­ν•œ κΈˆμ•‘μ΄ λ“€μ–΄μžˆλŠ” 배열이며, 길이(전체 λΆ€μ„œμ˜ 개수)λŠ” 1 이상 100 μ΄ν•˜μž…λ‹ˆλ‹€.
    • d의 κ° μ›μ†ŒλŠ” λΆ€μ„œλ³„λ‘œ μ‹ μ²­ν•œ κΈˆμ•‘을 λ‚˜νƒ€λ‚΄λ©°, λΆ€μ„œλ³„ μ‹ μ²­ κΈˆμ•‘은 1 μ΄μƒ 100,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μž…λ‹ˆλ‹€.
    • budget은 μ˜ˆμ‚°μ„ λ‚˜νƒ€λ‚΄λ©°, 1 μ΄μƒ 10,000,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μž…λ‹ˆλ‹€.

 

  • μž…μΆœλ ₯ 예 & μ„€λͺ…
no d budget result
1 [1,3,2,5,4] 9 3
2 [2,2,3,3] 10 4
  1. 각 λΆ€μ„œμ—μ„œ [1원, 3원, 2원, 5원, 4원]만큼의 κΈˆμ•‘μ„ μ‹ μ²­ν–ˆμŠ΅λ‹ˆλ‹€. λ§Œμ•½μ—, 1원, 2원, 4원을 μ‹ μ²­ν•œ λΆ€μ„œμ˜ λ¬Όν’ˆμ„ ꡬ맀해주면 μ˜ˆμ‚° 9μ›μ—μ„œ 7원이 μ†ŒλΉ„λ˜μ–΄ 2원이 λ‚¨μŠ΅λ‹ˆλ‹€. 항상 μ •ν™•νžˆ μ‹ μ²­ν•œ κΈˆμ•‘λ§ŒνΌ 지원해 μ€˜μ•Ό ν•˜λ―€λ‘œ 남은 2μ›μœΌλ‘œ λ‚˜λ¨Έμ§€ λΆ€μ„œλ₯Ό 지원해 주지 μ•ŠμŠ΅λ‹ˆλ‹€. μœ„ 방법 외에 3개 λΆ€μ„œλ₯Ό 지원해 쀄 방법듀은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

    1원, 2원, 3원을 μ‹ μ²­ν•œ λΆ€μ„œμ˜ λ¬Όν’ˆμ„ κ΅¬λ§€ν•΄μ£Όλ €λ©΄ 6원이 ν•„μš”ν•©λ‹ˆλ‹€.
    1원, 2원, 5원을 μ‹ μ²­ν•œ λΆ€μ„œμ˜ λ¬Όν’ˆμ„ κ΅¬λ§€ν•΄μ£Όλ €λ©΄ 8원이 ν•„μš”ν•©λ‹ˆλ‹€.
    1원, 3원, 4원을 μ‹ μ²­ν•œ λΆ€μ„œμ˜ λ¬Όν’ˆμ„ κ΅¬λ§€ν•΄μ£Όλ €λ©΄ 8원이 ν•„μš”ν•©λ‹ˆλ‹€.
    1원, 3원, 5원을 μ‹ μ²­ν•œ λΆ€μ„œμ˜ λ¬Όν’ˆμ„ κ΅¬λ§€ν•΄μ£Όλ €λ©΄ 9원이 ν•„μš”ν•©λ‹ˆλ‹€.
    3개 λΆ€μ„œλ³΄λ‹€ λ” λ§Žμ€ λΆ€μ„œμ˜ λ¬Όν’ˆμ„ κ΅¬λ§€ν•΄ μ€„ μˆ˜λŠ” μ—†μœΌλ―€λ‘œ μ΅œλŒ€ 3개 λΆ€μ„œμ˜ λ¬Όν’ˆμ„ κ΅¬λ§€ν•΄ μ€„ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

  2. λͺ¨λ“  λΆ€μ„œμ˜ λ¬Όν’ˆμ„ ꡬ맀해주면 10원이 λ©λ‹ˆλ‹€. λ”°λΌμ„œ μ΅œλŒ€ 4개 λΆ€μ„œμ˜ λ¬Όν’ˆμ„ ꡬ맀해 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

 


 

πŸ’› Solution

풀이 1

import java.util.Arrays;

class Solution {
    public int solution(int[] d, int budget) {
        Arrays.sort(d);
        int sum = 0;
        int dprt = 0;
        for(int i=0; i<d.length; i++) {
            sum += d[i];
            if(budget < sum) {
                dprt = i;
                break;
            } else if(budget >= sum) {
                dprt = d.length;
            }
        }

        return dprt;
    }
}

 

μ²˜λ¦¬μ†λ„ GOOD

 


 

풀이 2

import java.util.Arrays;

class Solution {
    public int solution(int[] d, int budget) {
        int dprt = 0;
        Arrays.sort(d);

        for (int i = 0; i < d.length; i++) {
            budget -= d[i];
            if (budget < 0) {
                break;
            }
            dprt++;
        }
        return dprt;
    }
}

 

μ²˜λ¦¬μ†λ„ GOOD


 


 

πŸ’œ Comment

이 λ¬Έμ œλŠ” κ°„λ‹¨ν•˜κ²Œ ν‘Ό νŽΈμ΄λ‹€. 일단 각 λΆ€μ„œμ˜ μ˜ˆμ‚°μ΄ λ“€μ–΄μžˆλŠ” int[] dλ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œλ‹€. κ·Έ μ΄μœ λŠ” 적은 μ˜ˆμ‚°λΆ€ν„° 더해야 κ°€μž₯ λ§Žμ€ 수의 λΆ€μ„œ 개수λ₯Ό λ„μΆœν•˜κΈ°κ°€ μš©μ΄ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

풀이1κ³Ό 풀이 2의 μ°¨μ΄λŠ” int[] λ°°μ—΄μ˜ 값을 λˆ„μ μ‹œμΌœ λ”ν•΄μ„œ μ²˜λ¦¬ν•˜λŠ”μ§€ λ˜λŠ” 직접 budgetμ—μ„œ λΉΌμ„œ μ²˜λ¦¬ν•˜λŠ”μ§€μ— λŒ€ν•œ 뢀뢄이닀.

 

[ 풀이 1 ]

for λ°˜λ³΅λ¬Έμ„ 톡해 λ°°μ—΄μ˜ 값을 sum에 λˆ„μ μ‹œμΌ°λ‹€. κ·Έ λ‹€μŒ sum이 budget보닀 큰 κ²½μš°μ—λŠ” dprt(λΆ€μ„œμ˜ 개수)에 iλ₯Ό λ„£κ³  λ°˜λ³΅λ¬Έμ„ λ‚˜κ°€λ„λ‘ μ½”λ“œλ₯Ό κ΅¬μ„±ν–ˆλ‹€. 이 λ•Œ, for문이 λͺ¨λ‘ λŒμ•„κ°€λ„ sum이 budget보닀 크지 μ•Šμ€ 경우λ₯Ό λŒ€λΉ„ν•΄μ„œ κ·Έ λ•Œμ—λŠ” dprt에 d.length(λΆ€μ„œμ˜ 총 개수)λ₯Ό 넣도둝 κ΅¬μ„±ν–ˆλ‹€.

 

[ 풀이 2 ]

풀이 1κ³Ό 달리, for 반볡문 μ•ˆμ—μ„œ budgetμ—μ„œ 각 λ°°μ—΄μ˜ κ°’(각 λΆ€μ„œμ˜ μ˜ˆμ‚°)을 빼도둝 κ΅¬μ„±ν–ˆλ‹€. 이 λ•Œ, budget이 0보닀 μž‘μ•„μ§€λŠ” κ²½μš°μ— ν•œν•˜μ—¬ λ°˜λ³΅λ¬Έμ„ λ‚˜κ°€λ„λ‘ κ΅¬μ„±ν–ˆλ‹€. 반볡문이 λŒμ•„κ°€λŠ” λ™μ•ˆ dprt의 κ°œμˆ˜λŠ” μ¦κ°€ν•˜λ―€λ‘œ 풀이 1κ³Ό λ™μΌν•œ κ²°κ³Όκ°€ λ‚˜μ˜€κ²Œ λœλ‹€.

 

9373μœ„πŸ˜πŸ’¨πŸ’¨πŸ’¨

 

 

 

 

λŒ“κΈ€