본문 바로가기
Algorithm Study/TopCoder

[TopCoder] KiwiJuiceEasy (C#, Java)

by HanaV 2023. 8. 10.
728x90

타로는 맛있는 키위 주스를 준비했습니다. 타로는 0부터 N-1이라 이름을 붙인 N개의 병에 키위 주스를 넣었습니다. 이때 i번째의 병의 용량은 capacities[i] 리터이며 타로가 i번째 병에 넣은 키위 주스의 양을 bottles[i] 리터라고 합니다.

타로는 병에 키위 주스를 재분배하려고 하며, 0부터 M-1까지 M회 조작합니다. i번째의 조작은 타로가 병 fromId[i]부터 병 toId[i]에 키위 주스를 넣는 것을 의미합니다. 병 fromId[i]가 비어 있거나 병 toId[i]가 꽉 차 있는 순간, 타로는 더 이상 키위 주스를 넣지 않습니다.

N개의 요소를 가진 정수 배열 int[]를 리턴해주세요. 배열의 i번째 요소는 모든 주스를 쏟는 작업이 완료되고 i번째 병에 남아 있는 키위 주스의 양입니다.


 

 

문제 파악하기

1. 주스 양
병 i의 용량 = capacities[i]
병 i에 담긴 주스=bottles[i]
즉, 추가로 담을 수 있는 주스의 양은 capacities[i] - bottles[i]

2. 옮기려는 병(fromId)의 주스 양 >= 옮겨담는 병(toId)의 주스 양
toId: 꽉 참 (toId에 있던 주스의 양+ toId의 추가로 담을 수 있는 주스의 양)
fromId: 원래 있던 양 - toId의 추가로 담을 수 있는 주스의 양

3. 옮기려는 병(fromId)의 주스 양 < 옮겨담는 병(toId)의 주스 양
toId: 원래 있던 양 + fromId에 있던 주스의 양
fromId: 0 (fromId에 있던 주스의 양 - fromId에 있던 주스의 양)

 

위 순서대로 코드를 짜면 아래와 같다.

(C#)

        private static int[] Solution(int[] capacities, int[] bottles, int[] fromId, int[] toId)
        {
            int n = capacities.Length;

            for (int i = 0; i < fromId.Length; i++)
            {
                int fromNum = fromId[i];
                int toNum = toId[i];
                int spaceLeft = capacities[toNum] - bottles[toNum];

                if (bottles[fromNum] >= spaceLeft)
                {
                    bottles[fromNum] -= spaceLeft;
                    bottles[toNum] += spaceLeft;
                }
                else
                {
                    bottles[toNum] += bottles[fromNum];
                    bottles[fromNum] = 0;
                }
            }

            return bottles;
        }

 

TopCoder 사이트에서 지금 C#이 컴파일이 안돼서 Java로 푸는 중..

(Java)

public class KiwiJuiceEasy {
    public int[] thePouring(int[] capacities, int[] bottles, int[] fromId, int[] toId) {
        for (int i = 0; i < fromId.length; i++) {
            int fromB = fromId[i];
            int toB = toId[i];
            int pour = Math.min(capacities[toB] - bottles[toB], bottles[fromB]);
            bottles[fromB] -= pour;
            bottles[toB] += pour;
        }
        return bottles;
    }
}
728x90

'Algorithm Study > TopCoder' 카테고리의 다른 글

[TopCoder] AdditionGame (Java)  (0) 2023.08.14
[TopCoder] 회문 (Java, C#)  (0) 2023.08.13
[TopCoder] InterestingDigits (Java, C#)  (0) 2023.08.12
[TopCoder] Cryptography (C#, Java)  (0) 2023.08.12
[TopCoder] InterestingParty (C#, Java)  (0) 2023.08.11

"); wcs_do();