숫자 블록(Lv2)
https://school.programmers.co.kr/learn/courses/30/lessons/12923
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
제한 사항
- 1 ≤ begin ≤ end ≤ 1,000,000,000
- end - begin ≤ 5,000
풀이
이번 문제는 자기 자신을 제외한 것중 가장 큰 약수를 구해서 해결했다.
특히, 문제 조건 중, 1~10,000,000인 숫자 블록만 사용한다 했으므로, 이것을 처리하는 것이 포인트였다.
약수를 구하는 것은 제곱근을 이용해서 풀었다.
예를 들어, 36의 제곱근은 6이고, 1~6까지의 숫자를 이용해서 36과 나누어 떨어진다면 36/나누어 떨어진 숫자 또한 약수일 것이기 때문이다. 즉, 36의 약수인 2가 나왔으면, 36/2인 18도 약수가 되는 것이다.
전체 Code
class Solution {
public int[] solution(long begin, long end) {
int s = (int) begin;
int e = (int) end;
int[] answer = new int[e-s+1];
// 약수 중 자기 자신을 제외하고 가장 큰 수
int idx=0;
for(int i=s; i<=e; i++){
// i가 1인 경우 처리
if(i==1) {
answer[idx++]=0;
continue;
}
int max=1;
// 자기 자신을 제외하기 위해 j=2 부터 시작
for(int j=2; j*j<=i; j++){
if(i%j==0){
max=Math.max(max,j);
// 최대가 10,000,000 이므로 그 이내의 것만 처리
if(j != i/j && i/j<=10000000){
max=Math.max(max,i/j);
}
}
}
answer[idx++] = max;
}
return answer;
}
}'알고리즘' 카테고리의 다른 글
| [프로그래머스] 광고 삽입- Java (0) | 2025.08.31 |
|---|---|
| [프로그래머스] 양궁대회 - Java (1) | 2025.08.31 |
| [프로그래머스] 혼자서 하는 틱택토 - Java (0) | 2025.08.27 |
| [프로그래머스] 비밀 코드 해독 - Java (0) | 2025.07.22 |
| [프로그래머스] 지게차와 크레인 - Java (0) | 2025.07.21 |