๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ProgramSolve/Programmers

[Programmers] ํƒ๋ฐฐ ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐํ•˜๊ธฐ (Java)

by SooooooooS 2023. 11. 9.
728x90

๐Ÿ› ๏ธ ๋ฌธ์ œ ๐Ÿ› ๏ธ

  1. ๋‹น์‹ ์€ ์ผ๋ ฌ๋กœ ๋‚˜์—ด๋œ n๊ฐœ์˜ ์ง‘์— ํƒ๋ฐฐ๋ฅผ ๋ฐฐ๋‹ฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.
    → deliveries ์˜ ๊ธธ์ด = pickups์˜ ๊ธธ์ด = n
  2. ๋ฐฐ๋‹ฌํ•  ๋ฌผ๊ฑด์€ ๋ชจ๋‘ ํฌ๊ธฐ๊ฐ€ ๊ฐ™์€ ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž์— ๋‹ด์•„ ๋ฐฐ๋‹ฌํ•˜๋ฉฐ, ๋ฐฐ๋‹ฌ์„ ๋‹ค๋‹ˆ๋ฉด์„œ ๋นˆ ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž๋“ค์„ ์ˆ˜๊ฑฐํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฐฐ๋‹ฌํ•  ํƒ๋ฐฐ๋“ค์€ ๋ชจ๋‘ ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž์— ๋‹ด๊ฒจ์„œ ๋ฌผ๋ฅ˜์ฐฝ๊ณ ์— ๋ณด๊ด€๋˜์–ด ์žˆ๊ณ , i๋ฒˆ์งธ ์ง‘์€ ๋ฌผ๋ฅ˜์ฐฝ๊ณ ์—์„œ ๊ฑฐ๋ฆฌ i๋งŒํผ ๋–จ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ i๋ฒˆ์งธ ์ง‘์€ j๋ฒˆ์งธ ์ง‘๊ณผ ๊ฑฐ๋ฆฌ j - i๋งŒํผ ๋–จ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. (1 ≤ i ≤ j ≤ n)
  4. ํŠธ๋Ÿญ์—๋Š” ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž๋ฅผ ์ตœ๋Œ€ cap๊ฐœ ์‹ค์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ํŠธ๋Ÿญ์€ ๋ฐฐ๋‹ฌํ•  ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž๋“ค์„ ์‹ค์–ด ๋ฌผ๋ฅ˜์ฐฝ๊ณ ์—์„œ ์ถœ๋ฐœํ•ด ๊ฐ ์ง‘์— ๋ฐฐ๋‹ฌํ•˜๋ฉด์„œ, ๋นˆ ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž๋“ค์„ ์ˆ˜๊ฑฐํ•ด ๋ฌผ๋ฅ˜์ฐฝ๊ณ ์— ๋‚ด๋ฆฝ๋‹ˆ๋‹ค.
    → ๋ฐฐ๋‹ฌํ•˜๊ฑฐ๋‚˜ ์ˆ˜๊ฑฐํ•  ๊ฐ€์žฅ ๋จผ ์ง‘ i → ๋ฌผ๋ฅ˜์ฐฝ๊ณ ์™€ i๋ฅผ ์™•๋ณตํ•ด์•ผํ•œ๋‹ค.
  6. ๊ฐ ์ง‘๋งˆ๋‹ค ๋ฐฐ๋‹ฌํ•  ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž์˜ ๊ฐœ์ˆ˜์™€ ์ˆ˜๊ฑฐํ•  ๋นˆ ์žฌํ™œ์šฉ ํƒ๋ฐฐ ์ƒ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ๊ณ  ์žˆ์„ ๋•Œ, ํŠธ๋Ÿญ ํ•˜๋‚˜๋กœ ๋ชจ๋“  ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐ๋ฅผ ๋งˆ์น˜๊ณ  ๋ฌผ๋ฅ˜์ฐฝ๊ณ ๊นŒ์ง€ ๋Œ์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. 
    → ๊ฐ€์žฅ ๋จผ ๊ณณ์˜ ์ž‘์—…์„ ๋จผ์ € ์™„๋ฃŒํ•ด์•ผํ•œ๋‹ค.
  7. ๊ฐ ์ง‘์— ๋ฐฐ๋‹ฌ ๋ฐ ์ˆ˜๊ฑฐํ•  ๋•Œ, ์›ํ•˜๋Š” ๊ฐœ์ˆ˜๋งŒํผ ํƒ๋ฐฐ๋ฅผ ๋ฐฐ๋‹ฌ ๋ฐ ์ˆ˜๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    → ํ•œ ์ง‘์— ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ—’๏ธ ์„ค๋ช… ๐Ÿ—’๏ธ

์ฒ˜์Œ ์ด ๋ฌธ์ œ๋ฅผ ์ฝ๊ณ  ๊ฐ€์žฅ ๋จผ์ € ๋– ์˜ฌ๋ฆฐ ๋ฐฉ๋ฒ•์€ ํ˜„์žฌ ๋‚จ์•„์žˆ๋Š” ์ž‘์—… ์ค‘ ๊ฐ€์žฅ ๋จผ ์ง‘์˜ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•˜๋ฉฐ ๋ฐฐ์—ด์„ ๋ณ€๊ฒฝํ•ด ๋‚˜์•„๊ฐ€๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฐ˜๋ณต๋ฌธ ์† ๋ฐ˜๋ณต๋ฌธ์ด ๊ณ„์† ์ƒ๊ฒจ ์‹œ๊ฐ„๋ณต์žก๋„๋„ ์ปค์ง€๊ณ  ๊ตฌํ˜„ํ•  ์ˆ˜๋ก ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜์„œ ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ค์› ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ์กฐ๊ธˆ ์ฐธ๊ณ ํ–ˆ๋Š”๋ฐ ์ •๋ง ๊ฐ„๋‹จํ•˜๊ณ  ์ƒ๊ฐ์„ ์ข€ ์ „ํ™˜ํ•˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์–ด ๊ธฐ๋ก์„ ๋‚จ๊ฒจ๋‘”๋‹ค.

 

์šฐ์„  ๋‚˜๋Š” ํ•œ๋ฒˆ ์™•๋ณตํ•  ๋•Œ์˜ ์ƒํƒœ๋ฅผ ๋ฐฐ์—ด์— ๋ฌด์กฐ๊ฑด ๋ณ€๊ฒฝ์„ ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ์ข€ ๋” ์ƒ๊ฐํ•ด๋ณด๋ฉด

- ๋ฐฐ๋‹ฌํ•ด์•ผํ•  ํƒ๋ฐฐ์™€ ์ˆ˜๊ฑฐํ•ด์•ผํ•  ํƒ๋ฐฐ์˜ ๊ฐœ์ˆ˜๋Š” ์ •ํ•ด์ ธ ์žˆ๋‹ค.
- ํ•œ๋ฒˆ ๋ฐฐ๋‹ฌํ•˜๋Ÿฌ ๊ฐ„ ํ›„ ๋Œ์•„์˜ฌ ๋•Œ ํŠธ๋Ÿญ์˜ ์šฉ๋Ÿ‰์˜ ๋‹ค์‹œ ์›์ ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
   ์ฆ‰, ํšŒ์ˆ˜ํ•˜๋Ÿฌ ์ถœ๋ฐœํ•  ๋•Œ ํŠธ๋Ÿญ์€ ๋น„์–ด์žˆ๋‹ค.
- ํŠธ๋Ÿญ์ด ๋ชจ๋“  ํƒ๋ฐฐ๋ฅผ ๋ฐฐ๋‹ฌํ•˜๋Ÿฌ ๊ฐ€๋Š” ๋™์•ˆ ์ตœ๋Œ€๋กœ ์‹ค์„ ์ˆ˜ ์žˆ๋Š” ์–‘์€ cap x (์ถœ๋ฐœํ•œ ํšŸ์ˆ˜)
   ๋ฐ˜๋Œ€๋กœ ๋ฌผ๋ฅ˜์ฐฝ๊ณ ๋กœ ๋ชจ๋‘ ํšŒ์ˆ˜ํ•˜๋Š” ๋™์•ˆ ์ตœ๋Œ€๋กœ ์‹ค์„ ์ˆ˜ ์žˆ๋Š” ์–‘ ๋˜ํ•œ cap x (๋„์ฐฉํ•œ ํšŸ์ˆ˜) ์ด๋‹ค.

 

๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์ฆ‰, ์ตœ์†Œ ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋ ค๋ฉด ์™•๋ณตํšŸ์ˆ˜๋ฅผ ์ค„์—ฌ์•ผํ•œ๋‹ค.

์™•๋ณต ํšŸ์ˆ˜๋ฅผ ์ค„์ด๋ ค๋ฉด ํŠธ๋Ÿญ ์šฉ๋Ÿ‰์„ ๊ฝ‰ ์ฑ„์›Œ์„œ ํƒ๋ฐฐ๋ฅผ ๋ฐฐ๋‹ฌํ•˜๊ณ  ์ˆ˜๊ฑฐํ•ด์•ผํ•œ๋‹ค.

๋ฌผ๋ฅ˜์ฐฝ๊ณ ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๋Š” ์ง‘์˜ ์ž‘์—…์ฒ˜๋ฆฌ๋ฅผ ์šฐ์„ ์œผ๋กœ ํ•˜๋˜ ๊ฐ€๋Š” ๋™์•ˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์œ„์˜ ๊ทธ๋ฆผ์—์„œ ๋ณด๋ฉด 5๋ฒˆ ์ง‘์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•œ๋ฒˆ ์™•๋ณตํ•˜๋ฉด ๊ฐ€๋Š” ๋™์•ˆ 2๊ฐœ, ์˜ค๋Š” ๋™์•ˆ 4๊ฐœ์˜ ์ƒ์ž๋ฅผ ๋” ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด 4๋ฒˆ ์ง‘ ์ž‘์—…์„ ๊ฐ™์ด ์ฒ˜๋ฆฌํ•˜๊ณ  3๋ฒˆ ์ง‘์˜ ๋ฐฐ๋‹ฌ 1๊ฐœ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

→ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด 5๋ฒˆ ์ง‘์„ ์™•๋ณตํ•˜๋Š”๋ฐ ์ตœ๋Œ€๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ตœ์†Œ ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‚ด๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ๋Š๋‚€ ๊ฒƒ์€ ํ˜„์žฌ ๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ๋„ˆ๋ฌด ์žˆ๋Š” ๊ทธ๋Œ€๋กœ๋งŒ ์ƒ๊ฐํ•œ๋‹ค.

๋ฌธ์ œ์—์„œ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์žฅ์ด ์˜๋ฏธํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ์ƒ๊ฐ์„ ๋ชปํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ์ด๋ฒˆ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ๊ทธ ๋ฌธ์žฅ์ด ์–ด๋–ค ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€, ๊ทธ ์˜๋ฏธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์ข€ ๋” ๋‹จ์ˆœํ•˜๊ฒŒ ํ’€์–ด๋ณธ ์‹œ๊ฐ„์ด์—ˆ๋‹ค.

์•ž์œผ๋กœ ๋ฌธ์ œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฝ๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜์ง€๋งŒ ๊ทธ ์˜๋ฏธ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ง€๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค.


๐Ÿ€ ํ’€์ด ๐Ÿ€

/**
 * ํƒ๋ฐฐ ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐํ•˜๊ธฐ
 * https://school.programmers.co.kr/learn/courses/30/lessons/150369
 */
public class Parcel {
    public static void main(String[] args) {
        int cap = 4;
        int n = 5;
        int[] deliveries = {1, 0, 3, 1, 2};
        int[] pickups = {0, 3, 0, 4, 0};
        System.out.println(solution(cap, n, deliveries, pickups));
    }

    /**
     * ํŠธ๋Ÿญ ํ•˜๋‚˜๋กœ ๋ชจ๋“  ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐ๋ฅผ ๋งˆ์น˜๊ณ  ๋ฌผ๋ฅ˜์ฐฝ๊ณ ๊นŒ์ง€ ๋Œ์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ์ด๋™ ๊ฑฐ๋ฆฌ
     * @param cap ํŠธ๋Ÿญ ์šฉ๋Ÿ‰
     * @param n ๋ฐฐ๋‹ฌํ•  ์ง‘์˜ ๊ฐœ์ˆ˜
     * @param deliveries ๊ฐ ์ง‘์— ๋ฐฐ๋‹ฌํ•  ํƒ๋ฐฐ ์ƒ์ž์˜ ๊ฐœ์ˆ˜
     * @param pickups ๊ฐ ์ง‘์—์„œ ์ˆ˜๊ฑฐํ•  ์ƒ์ž ๊ฐœ์ˆ˜
     * @return ์ตœ์†Œ ์ด๋™ ๊ฑฐ๋ฆฌ
     */
    public static long solution(int cap, int n, int[] deliveries, int[] pickups) {
        long answer = 0;
        int d = 0; // ๊ฐ€๋Š” ๋™์•ˆ ๋ฐฐ๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ํƒ๋ฐฐ ์šฉ๋Ÿ‰ 
        int p = 0; // ์˜ค๋Š” ๋™์•ˆ ์ˆ˜๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ํƒ๋ฐฐ ์šฉ๋Ÿ‰
        for(int i = n-1; i >= 0; i--) { //๋ฌผ๋ฅ˜์ฐฝ๊ณ ์—์„œ ๊ฐ€์žฅ ๋จผ ๊ณณ์˜ ์ž‘์—…๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ!
            //ํ˜„์žฌ ํƒ๋ฐฐ๋ฅผ ํŠธ๋Ÿญ์— ๋‹ด๋Š”๋‹ค.
            d -= deliveries[i];
            p -= pickups[i];

            // ๊ฐ€๊ฑฐ๋‚˜ ์˜ค๋Š” ์ฐจ๋Ÿ‰์˜ ์šฉ๋Ÿ‰์ด ๋ถ€์กฑํ•  ๊ฒฝ์šฐ
            while(d < 0 || p < 0) {
                // ์ด๋™ํ•˜๋Š” ๋™์•ˆ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋Š” ์šฉ๋Ÿ‰ ์ถ”๊ฐ€
                d += cap;
                p += cap;
                answer += (i+1) * 2; // ๋ฌผ๋ฅ˜์ฐฝ๊ณ ์—์„œ (i+1)๋ฒˆ์งธ ์ง‘๊นŒ์ง€ ์ด๋™๊ฑฐ๋ฆฌ
            }
        }
        return answer;
    }
}
728x90