본문 바로가기
Algorithm/BaekJoon[Java]

백준 1676

by 씨니 2022. 4. 2.
728x90

▶ 백준 1676 - 팩토리얼 0의 개수

 

▶ 풀이방법

- 문제에서 N은 0~500으로 N팩토리얼 표현하면 long형 값을 넘어가서 표현불가.(25부터 long형값 범위 넘어감.)

- 따라서 밑의 코드는 오답이 됨.

import java.io.*;
public class Main {
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int n = Integer.parseInt(br.readLine());
		
		int num = 1;
		if(n > 2) {
			for(int i = 2; i <= n; i++) num *= i;
		}else num = n;
		String str = String.valueOf(num);
		
		bw.write(str);
		int result = 0;
		for(int i = str.length()-1; i >= 0; i--) {
			if(str.charAt(i) == '0') {
				result++;
			}else {
				bw.write(String.valueOf(result));
				break;
			}
		}
		bw.flush();
		bw.close();
		br.close();
	}
}

 

- 다른 해결방법(2와 5의 쌍으로 10의 배수 만들어 0의 개수 판별하는 방식)

2,5하나의 쌍으로 마지막 수 0이 만들어짐!

import java.io.*;
public class Main {
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int n = Integer.parseInt(br.readLine());
		
		int n2 = 0;
		int n5 = 0;
		
		//2와 5의 곱 개수 세기
		for(int i = 2; i <= n; i++) {
			int num = i;// 없으면 시간초과 발생
			while(num % 2 == 0) { //소인수 분해하여 2 개수 구하기
				n2++;
				num /= 2;
			}
			while(num % 5 == 0) { //소인수 분해하여 5 개수 구하기
				n5++;
				num /= 5;
			}
		}
		
		bw.write(String.valueOf(Math.min(n2, n5)));
		bw.flush();
		bw.close();
		br.close();
	}
 }

 

+나한테는 어려웠음,,ㅜ

728x90

'Algorithm > BaekJoon[Java]' 카테고리의 다른 글

백준 6588  (0) 2022.04.07
백준 2004  (0) 2022.04.03
백준 11653  (0) 2022.04.02
백준 10872  (0) 2022.04.01
백준 1929  (0) 2022.04.01