본문 바로가기

백준

11399번: ATM(Java)

 

 

 

 정렬 문제이다. 정렬 후 P1, P1+P2, P1+P2+P3 .......     을 모두 더하면 된다.

이걸 나열해 보면

if(n = 5)

result =

P1+
P1+P2+
P1+P2+P3+
P1+P2+P3+P4+
P1+P2+P3+P4+P5
가 되고 이것은 


P1*n + 
P2*n-1 + 
P3*n-2 +
P4*n-3 +
P4*n-4 +
P5*n-5

을 의미한다. 이걸 반복문으로 나타내면 다음과 같다.

 

for(int i = 0; i<n; i++)
{
    result += times[i] * (n-i);
}

 

 이 방법을 쓰려면 우선 정렬을 해야 한다.

Java의 Arrays에서 제공하는 sort() 함수를 이용하는 방법과 직접 sort 함수를 만드는 방법이 있다.

 

 

 

 

1. Arrays.sort() 시용 코드

public static void main(String[] args)
{
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int[] times = new int[n];
    int result = 0;

    for(int i = 0; i<n; i++)
    {
        times[i] = scanner.nextInt();
    }
    Arrays.sort(times);
    for(int i = 0; i<n; i++)
    {
        result += times[i] * (n-i);
    }

    System.out.println(result);
}

 

 

 

 

2. 직접 sort 구현 코드

public class Main
{
    public static void BSort(int[] data)//Bubble sort
    {
        int length = data.length;
        int temp;
        for(int i = 0; i<length - 1; i++)
        {
            for(int j = i+1; j<length; j++)
            {
                if(data[j] < data[i])
                {
                    temp = data[j];
                    data[j] = data[i];
                    data[i] = temp;
                }
            }
        }
    }
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] times = new int[n];
        int result = 0;

        for(int i = 0; i<n; i++)
        {
            times[i] = scanner.nextInt();
        }
        BSort(times);
        for(int i = 0; i<n; i++)
        {
            result += times[i] * (n-i);
        }

        System.out.println(result);
    }
}

 

'백준' 카테고리의 다른 글

1302번: 베스트셀러(Java)  (0) 2023.02.19
1158번: 요세푸스 문제(Java)  (2) 2023.02.16
1406번: 에디터(Java)  (0) 2023.02.07
1269번: 대칭 차집합(Java)  (2) 2023.01.31
1620번: 나는야 포켓몬 마스터 이다솜(Java)  (0) 2023.01.31