728x90
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/136798
생각
- 생각을 하고, 구현하는 정도의 수준이 Lv1 이라면, 나는 그정도는 되는 것 같다는 생각이 들었다.
// 1. 기사들을 순회하면서
// 2. 약수의 갯수 배열 채우기
// 3. 배열을 채울 때 limit을 고려하여 초과한다면 power 로 대체하기
// 4. sum 구하기
// 약수 구하는 방법
// 1 ~ 15 순회
// 15 % var = 0 이면 cnt++
코드
public class Main {
public static void main(String[] args) {
System.out.println(solution(5,3,2)); // 2
System.out.println(solution(10,3,2)); // 2
}
public static int solution(int number, int limit, int power) {
int answer = 0;
for (int i = 1; i <= number ; i++) {
int yakSu = getYaksu(i);
answer += yakSu>limit ? power : yakSu;
}
return answer;
}
private static int getYaksu(int gisaNum) {
int cnt = 0;
for (int i = 1; i <= Math.sqrt(gisaNum) ; i++) {
if(i*i==gisaNum) cnt++;
else if(gisaNum%i==0) cnt+=2;
}
return cnt;
}
}
다른 사람 풀이
- 약수 갯수를 미리 다 구해놓는 방법이 신기했다.
public class Main {
public static void main(String[] args) {
System.out.println(solution(5,3,2)); // 2
System.out.println(solution(10,3,2)); // 2
}
public static int solution(int number, int limit, int power) {
int[] count = new int[number + 1];
for (int i = 1; i <= number; i++) {
for (int j = 1; j <= number / i; j++) {
count[i * j]++;
}
}
int answer = 0;
for (int i = 1; i <= number; i++) {
if (count[i] > limit) {
answer += power;
} else {
answer += count[i];
}
}
return answer;
}
}
728x90
반응형
'Dev > Algorithm' 카테고리의 다른 글
[프로그래머스] 푸드 파이트 대회 (0) | 2024.05.24 |
---|---|
[프로그래머스] 과일 장수 - Java (0) | 2024.05.24 |
[프로그래머스] 가장 가까운 같은 글자 - Java (0) | 2024.05.22 |
[프로그래머스] 크기가 작은 부분 문자열 - Java (0) | 2024.05.21 |
[프로그래머스] 문자열 나누기 - Java (0) | 2024.05.21 |