백준 11399 자바 및 C++

이진우·2023년 9월 20일

알고리즘 문제풀이

목록 보기
33/95

풀기 전 :

이 문제는 어떨 때 가장 최적인 경우인지 친절히 알려준다 사용 시간이 짧은 사람을 앞으로 정렬 해주고 더해주면 가장 짧은 시간이 된다.

자바(JAVA)

import java.io.*;
import java.lang.reflect.Array;
import java.util.*;
import java.util.Collections;
public class Main{
    public static void main(String[] args) throws IOException {
      Scanner scanner=new Scanner(System.in);
      int n= scanner.nextInt();
      int arr[]=new int[n];
      for(int i=0;i<n;i++){
          arr[i]=scanner.nextInt();
      }
      Arrays.sort(arr);
      int waitingTime=0;
      int total=0;
      for(int i=0;i<n;i++){
          waitingTime+=arr[i];
          total+=waitingTime;

      }
      System.out.println(total);
    }
}

C++

include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
using namespace std;
int main(void) { 
	int n;
	cin >> n;
	int* arr = new int[n];
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	sort(arr, arr + n);
	int waitingTime = 0;
	int total = 0;
	for (int i = 0; i < n; i++) {
		waitingTime += arr[i];
		total += waitingTime;

	}
	cout << total;


}

6개월 후에 다시 풀었을때:

기다리는 시간이 짧은 사람을 먼저 앞에 둘 수록 계속 누적되는 값이 작아진다고 볼 수 있으므로 그리디문제임을 인식하고 풀었다.

import java.io.*;
import java.lang.reflect.Array;
import java.nio.Buffer;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
       Scanner scanner=new Scanner(System.in);
       int n=scanner.nextInt();
       int p[]=new int[n+1];
       int waitingTime[]=new int[n+1];
       p[0]=0;
       for(int i=1;i<=n;i++){
           p[i]= scanner.nextInt();
       }
       Arrays.sort(p);
       for(int i=1;i<=n;i++){
         waitingTime[i]=waitingTime[i-1]+p[i];
       }
        int sum=0;
       for(int i=1;i<=n;i++){
           sum+=waitingTime[i];
       }
        System.out.println(sum);


    }


}

위와 비슷한 것같다.

profile
기록을 통해 실력을 쌓아가자

0개의 댓글