개발자 미니민의 개발스터디

[백준 JAVA] 11653번 풀이 - 소인수분해

by mini_min

 

처음 풀이

처음에는 while 문을 활용해서 n이 0이 아닐 때는 계~속 돌도록 코드를 짰는데 

채점 결과 시간초과가 났다...^^

누가봐도 while 때문인 것 같아서 while 을 빼고 어떻게 수정할지 고민하다가 

i 값을 초기화하고 나뉜 n을 계속 돌리면 해결되는 문제 발견!

 

기존에 while 을 사용했을 때

		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		
		while ( n != 0 )
		{

			for ( int i = 2; i <= n; i++ )
			{
				if ( n % i == 0 )
				{
					n = ( n / i );
					System.out.println(i);
					
					i = 1;
				}
				
			}
			

		}
			
		sc.close();

 

변경

시간 초과 해결!

import java.util.Scanner;

/**
 * 소인수분해
 * 11653
 * n이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.
 * 
 */
public class Main {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();

		
		for ( int i = 2; i <= n; i++ )
		{
			if ( n % i == 0 )
			{
				n = ( n / i );
				System.out.println(i);
				
				i = 1;
			}
			
		}

		sc.close();
	}
}

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기