Algorithms/프로그래머스

[프로그래머스][Java] 기사단원의 무기

hyunki.Dev 2023. 2. 5. 21:36

📌 문제

프로그래머스 - 기사단원의 무기

 

프로그래머스

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

programmers.co.kr

 

📌 풀이

  • numbers 의 숫자들마다 약수의 개수를 구하고 구한 약수의 개수를 정답 리스트에 담는다.
  • 이 때 limit 보다 약수의 개수가 크다면 power 의 공격력 수치로 그 값을 대체한다.
  • 리스트에 담긴 값들의 합을 return 한다.

 

📌 코드

import java.util.List;
import java.util.ArrayList;
import java.util.IntSummaryStatistics;

class Solution {
    public int solution(int number, int limit, int power) {
        int answer = 0;
        int count = 0;
        
        List<Integer> list = new ArrayList<>();
        for(int i= 1; i< number + 1; i++){
            list.add(i);
        }
        
        //정답 리스트
        List<Integer> answerList = new ArrayList<>();
        
        for(int num_list : list){
            //약수 구하기
            for (int i = 1; i * i <= num_list; i++) {
	            if (i * i == num_list) count++;
	            else if (num_list % i == 0) count += 2;
            }
            
            if(count > limit){
                answerList.add(power);
                
            } else {
                answerList.add(count);
            }
            
            count = 0;
        }
        
        for(int num : answerList){
            answer += num;
        }
        return answer;
    }
}

 

다른 사람들의 풀이에 있던 stream 을 활용한 답안도 가져와 봤습니다. 

아직 익숙치는 않지만 계속 stream을 활용할 수 있도록 노력할 예정입니다..!

 

import java.util.ArrayList;
import java.util.List;

class Solution {
    public int solution(int number, int limit, int power) {
        List<Integer> list = new ArrayList<>();

        for (int i = 1; i <= number; i++) {
            countDivisor(list, i);
        }

        return list.stream().mapToInt(e -> e <= limit ? e : power)
                .sum();
    }

    private void countDivisor(List<Integer> list, int number) {
        int count = 0;
        for (int i = 1; i <= Math.sqrt(number); i++) {
            if (number % i == 0) {
                count++;
                if (i != number / i) {
                    count++;
                }
            }
        }
        list.add(count);
    }
}