CODEKATA 56 ~ 60

Tak Jeon·2025년 1월 9일

알고리즘

목록 보기
67/101

56번 과일 장수

import java.util.*;

class Solution {
    public int solution(int k, int m, int[] score) {
        int answer = 0;
        Arrays.sort(score);

        for(int i = 0 ; i < score.length / 2 ; i++){
            int tmp = score[i];
            score[i] = score[score.length - i - 1];
            score[score.length - i - 1] = tmp;
        }

        for(int i = 0 ; i < score.length ; i += m){
            if(i + m > score.length){
                break;
            }
            answer += score[i + m - 1] * m;
        }

        return answer;
    }
}

57번 모의고사

class Solution {
    public int[] solution(int[] answers) {
        int[][] supo = {{1,2,3,4,5}, {2,1,2,3,2,4,2,5},{3,3,1,1,2,2,4,4,5,5}};
        int[] result = new int[3];
        int max = 0;
        for(int i = 0 ; i < answers.length ; i++){
            result[0] += supo[0][i % 5] == answers[i] ? 1 : 0;
            result[1] += supo[1][i % 8] == answers[i] ? 1 : 0;
            result[2] += supo[2][i % 10] == answers[i] ? 1 : 0;
            max = Math.max(Math.max(Math.max(max,result[0]),result[1]),result[2]);
        }
        int len = 0;
        for(int cur : result){
            if(max == cur)len++;
        }
        
        int[] answer = new int[len];
        int idx = 0;
        for(int i = 0 ; i < 3; i ++){
            if(result[i] == max){
                answer[idx++] = i + 1;
            }
        }
        
        return answer;
    }
}

58번 소수 만들기

import java.util.*;

class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        boolean[] isPrime = new boolean[3000];
        Arrays.fill(isPrime, true);
        isPrime[0] = isPrime[1] = false;
        for(int i = 2 ; i * i < 3000 ; i++){
            if(isPrime[i]){
                for(int j = i * i; j < 3000 ; j += i){
                    isPrime[j] = false;
                }
            }
        }
        
        for(int i = 0 ; i < nums.length - 2 ; i++){
            for(int j = i + 1 ; j < nums.length - 1 ; j++){
                for(int k = j + 1 ; k < nums.length ; k++){
                    if(isPrime[nums[i] + nums[j] + nums[k]]){
                        answer++;
                    }
                }
            }
        }

        return answer;
    }
}

59번 덧칠하기

class Solution {
    public int solution(int n, int m, int[] section) {
        int answer = 0;
        int len = section.length;
        int idx = 0;

        while(idx < len){
            int curIdx = section[idx];
            int curPaintLen = curIdx + m - 1;
            while(idx < len){
                if(section[idx] <= curPaintLen){
                    idx++;
                }else{
                    break;
                }
            }
            answer++;
        }

        return answer;
    }
}

60번 기사단원의 무기

class Solution {
    
    public int solution(int number, int limit, int power) {
        int answer = 0;
        int[] divisor = new int[number + 1];
        for(int i = 1 ; i <= number; i++){
            for(int j = i ; j <= number ; j += i){
                divisor[j]++;
            }
        }
        
        for(int i = 1 ; i <= number ; i++){
            answer += divisor[i] > limit ? power : divisor[i];
        }
        
        return answer;
    }
}
profile
문제 해결을 좋아하는 개발자 입니다 :)

0개의 댓글