본문 바로가기

코딩테스트/Level1

모두의 약수

문제

자연수 N이 입력되면 1부터 N까지의 각 숫자들의 약수의 개수를 출력하는 프로그램을 작성하세요.
만약 N이 8이 입력된다면 1(1개), 2(2개), 3(2개), 4(3개), 5(2개), 6(4개), 7(2개), 8(4개) 와 같이
각 숫자의 약수의 개수가 구해집니다.
출력은 다음과 같이 1부터 차례대로 약수의 개수만 출력하면 됩니다.
1 2 2 3 2 4 2 4 와 같이 출력한다.

입력 예제
8

 

출력 예제
1 2 2 3 2 4 2 4

import java.util.Arrays;

public class problem09 {
	
	public static void main(String[] args) {		
		int input = 8;	
		String result = method2(input);
		
		System.out.println(result);
	}
	
	//첫 번째 답: 제한 시간 1초 넘음
	public static String method(int input) {
		String result = "";
		
		for(int i = 1; i<=input; i++) {
			int count = 0;
			
			//input이 3000이면 3000번 돈다.
			for(int j = 1; j<=i; j++) {  
				if(i%j == 0)
					count++;
			}
			
			result = result + count + " ";
		}
		
		return result;
		
	}
	
	//두 번째 답: 제한 시간 1초 안 넘음
	//1~N까지 차례로 배수인 애들만 count 늘려준다.
	public static String method2(int input) {
		int[] count = new int[input];  //0으로 자동으로 초기화.
		
		for(int i = 1; i<=input; i++) {
			
			//j=+i 로 배수만큼 증가시킨다.
            //배수인 애들을 count하는 게 훨씬 빠름. 
			//input이 3000이면 10번만 돈다.
			for(int j = i; j<=input; j+=i) { 
				count[j-1]++;
			}
		}
		
		return Arrays.toString(count);
	}

}

'코딩테스트 > Level1' 카테고리의 다른 글

숫자의 총 개수  (0) 2022.02.09
자릿수의 합  (0) 2022.02.09
올바른 괄호  (0) 2022.02.09
영어단어 복구  (0) 2022.02.09
숫자만 추출  (0) 2022.02.09