greedy - 가장 큰수

changi123·2024년 3월 1일
0
post-thumbnail

내 코드

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
   	// 큰 수의 법칙
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt(); // 배열의 크기
		int m = sc.nextInt(); // 숫자가 더해지는 횟수
		int k = sc.nextInt(); // k번 초과하여 더해짛 수 없다

		int [] arr = new int[n];
		for(int i = 0 ; i < n ; i++) {
			arr[i] = sc.nextInt();
		}
		
		Arrays.sort(arr);
		
		int first = arr[n-1];
		int second  = arr[n-2];
		int sum = 0;
		int cnt = ( m  / ( k + 1 ) ) * k ;
		
		int cnt2 = ( m % ( cnt ));
		
		sum = (cnt * first )+ (second * cnt2);
		System.out.println(sum);

    }
}

코드 설명

(1) 큰 수의 법칙은 가장 큰 수와 두 번째 큰 수를 구하고 각각의 구해야 하는 횟수를 구해서 더하면 된다고 생각했다.

솔루션 코드

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
   
        Scanner sc = new Scanner(System.in);

        // N, M, K를 공백을 기준으로 구분하여 입력 받기
        int n = sc.nextInt();
        int m = sc.nextInt();
        int k = sc.nextInt();

        // N개의 수를 공백을 기준으로 구분하여 입력 받기
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }

        Arrays.sort(arr); // 입력 받은 수들 정렬하기
        int first = arr[n - 1]; // 가장 큰 수
        int second = arr[n - 2]; // 두 번째로 큰 수

        // 가장 큰 수가 더해지는 횟수 계산
        int cnt = (m / (k + 1)) * k;
        cnt += m % (k + 1);

        int result = 0;
        result += cnt * first; // 가장 큰 수 더하기
        result += (m - cnt) * second; // 두 번째로 큰 수 더하기

        System.out.println(result);

    }
}

코드 리뷰

(1) 위 과정은 똑같았다. 근데 cnt += m % (k + 1); 이부분을 왜 해줘야하는지 생각하지 못했는데 m 이 (k+1) 로 나누어 떨어지지 않는 경우 m % (k+1) 만큼 가장 큰 수를 더해줘야하기 때문에 고려해야한다. 또한 수열에 대해서도 공부를 하자

profile
개발자 홍찬기 꾸준한 사람이 되자

0개의 댓글

관련 채용 정보