반응형

 

https://school.programmers.co.kr/learn/courses/30/lessons/135808

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


 

제한사항


3 ≤ k ≤ 9
3 ≤ m ≤ 10
7 ≤ score의 길이 ≤ 1,000,000
1 ≤ score[i] ≤ k
이익이 발생하지 않는 경우에는 0을 return 해주세요

 


Key Point : score의 길이 10^6, 최대 이익

 

입력 길이가 10^6이므로 이중 for문은 지양하고, 최대 이익을 구하는 것은 정렬을 하는 게 효율적이라고 생각.

-> Arrays.sort()

 

 

import java.util.*;

class Solution {
    public int solution(int k, int m, int[] score) {
        Arrays.sort(score);
        int answer = 0;
        int repeat = score.length / m;
        int rest = score.length % m;
        
        // m개로 안 나뉘는 경우
        if(score.length % m != 0) {
            for(int i = 0; i < repeat; i++) {
                answer += m*score[(i*m) + rest];
            }
        }
        // m개로 나뉘는 경우
        else {
            for(int i = 0; i < repeat; i++) {
                answer += m*score[i*m];
            }
        }
        return answer;
    }
}

 

 

+ 여담으로,

k가 만약 최대 점수를 나타내는 문제였다면, score의 인덱스를 나타내주는 i*m을 적절하게 변경하면 풀 수 있다.

반응형

+ Recent posts