99클럽 코테 스터디 19일차 TIL - 그리디

김동하·2024년 8월 9일
0

알고리즘

목록 보기
67/90

문제

[과일장수]

풀이

  • 그리디 문제인데 이상하게 풀어버림...

코드

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Collections;

class Solution {
    public int solution(int k, int m, int[] score) {
        Arrays.sort(score);
        ScoreCalculator scoreCalculator = new ScoreCalculator(k, m, score);
        return scoreCalculator.calculateTotalScore();
    }
}

class Scores {
    private int[] score;
    
    public Scores(int[] score){
        this.score = score;
    }
    
    public int getMinScore(){
        return score[0];
    }
    
    public int calculateGroupScore(int m){
        return getMinScore() * m;
    }
}

class ScoreCalculator {
    private int k;
    private int m;
    private int[] sortedScores;
    
    public ScoreCalculator(int k, int m, int[] score) {
        this.k = k;
        this.m = m;
        this.sortedScores = score;
    }
    
    public int calculateTotalScore() {
        int totalScore = 0;
        
        for (int i = sortedScores.length; i >= 0; i -= m) {            
            int[] subArr = Arrays.copyOfRange(sortedScores, i, i + m);
            Scores group = new Scores(subArr);
            totalScore += group.calculateGroupScore(m);
        }
        return totalScore;
    }
}

정리

  • 뭔가 이런 문제만 보면 객체 지향을 도전하고 싶어서 최대한 객체 지향스럽게 풀어보았다... 이게 맞는 건지는 모르겠음
  • score를 계산하는 클래스랑 score group을 나누는 클래스를 만들어 역할분리를 했음
profile
프론트엔드 개발

0개의 댓글