📌 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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);
}
}
'Algorithms > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Java] 삼총사 (0) | 2023.02.16 |
---|---|
[프로그래머스][Lv2][Java] 귤 고르기 (0) | 2023.02.11 |
[프로그래머스][Java] 명예의 전당 (1) (0) | 2023.02.04 |
[프로그래머스] 문자열 나누기 - Java (0) | 2023.01.31 |
[프로그래머스][Java] 가장 가까운 같은 글자 (0) | 2023.01.25 |