문제 정보: 1933. 간단한 N의 약수
입력으로 1개의 정수 N 이 주어진다.
정수 N 의 약수를 오름차순으로 출력하는 프로그램을 작성하라.
[제약사항]
N은 1 이상 1,000 이하의 정수이다. (1 ≤ N ≤ 1,000)
[입력]
입력으로 정수 N 이 주어진다.
[출력]
정수 N 의 모든 약수를 오름차순으로 출력한다.
입력 10 |
출력 1 2 5 10 |
public class solution_1933 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N;
N = sc.nextInt();
long start, end;
int cnt = 0;
//-----------------반으로 줄였을때 약수 구하기-----------------
List<Integer> list = new ArrayList<>();
start = System.currentTimeMillis();
for(int i = 1; i * 2 <= N; i++) {
if(N % i == 0){
++cnt;
list.add(i);
}else{
continue;
}
int mock = (N / i);
if(mock % N == 0 && mock > (N / 2)){
++cnt;
if(!list.contains(mock)){
list.add(mock);
}
}
}
list.sort(Comparator.naturalOrder());
for(int i = 0; i < list.size(); i++){
System.out.print((i > 0 ? " " : "") + list.get(i));
}
end = System.currentTimeMillis();
System.out.println();
System.out.print(cnt);
System.out.println();
System.out.println("수행시간: " + (end - start) + " ms");
System.out.println("------------------------------------");
cnt = 0;
//-----------------일반적인 약수 구하기-----------------
start = System.currentTimeMillis();
for(int i = 1; i <= N; i++){
if(N % i == 0){
System.out.print((i > 1 ? " " : "") + i);
++cnt;
}
}
end = System.currentTimeMillis();
System.out.println();
System.out.print(cnt);
System.out.println();
System.out.println("수행시간: " + (end - start) + " ms");
}
}
<작업 순서 및 후기>
처음에는 반복문을 가지고 약수를 구하고 개수도 추가해서 짰다.
약수에 대해 검색을 해보니 효율적인 방법이 있다는 것을 참고하여 짜 본 결과다.
결과도 중요하지만 저런 생각의 차이가 속도를 반이나 줄이는 기적을 만드는 것을 보니...
간단히 생각하지 말고 더 좋은 코드를 짜는 생각을 할 필요를 느꼈다!
'알고리즘 > SW Expert Academy' 카테고리의 다른 글
1206. [S/W 문제해결 기본] 1일차 - View (0) | 2021.08.28 |
---|---|
1859. 백만 장자 프로젝트 (0) | 2021.08.25 |
1983. 조교의 성적 매기기 (0) | 2021.08.18 |
1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기 (0) | 2021.08.05 |
1984. 중간 평균값 구하기 (0) | 2021.08.05 |