250x250
syk531
하루
syk531
전체 방문자
오늘
어제
  • 분류 전체보기 (166)
    • 개발 (166)
      • java (11)
      • kotlin (7)
      • spring, spring boot (35)
      • Javascript (4)
      • Tyhmeleaf (2)
      • Kafka (17)
      • Docker (8)
      • Kubernetes (3)
      • Elastic Stack (4)
      • react native (3)
      • Web (4)
      • GIS (3)
      • 리눅스 (16)
      • Windows (2)
      • 네트워크 (2)
      • 안드로이드앱 (5)
      • git (2)
      • Tool (15)
      • 프로젝트 (7)
      • 백준알고리즘 (14)
      • DB (2)

인기 글

최근 글

블로그 메뉴

    공지사항

    태그

    • 티스토리챌린지
    • 오블완
    • 뉴스앱

    최근 댓글

    티스토리

    hELLO · Designed By 정상우.
    syk531

    하루

    2004번_조합 0의 개수_java
    개발/백준알고리즘

    2004번_조합 0의 개수_java

    2022. 12. 8. 08:33
    728x90
    반응형

    끝자리가 0이 되기 위해서는 10의 배수여야 하고 10의 배수는 2의배수 이면서 5의 배수이다.   
    n이 250일 경우 5를 약수로 가지는 개수는 아래의 표와 같이 5의 배수의 수 + 25의 배수의 개수 + 125의 배수의 개수의 합과 같다.   
    5   
    25 = 5 * 5   
    125 = 5 * 5 * 5 

    250!의 5를 약수로 가지는 수는 250 / 5 + 250 / 25 + 250 / 125가 된다.   
    결과값은 (n!의 5를 약수로 가지는 수 - r!의 5를 약수로 가지는 수 - (n-r)!의 5를 약수로 가지는 수) 와 (n!의 2를 약수로 가지는 수 - r!의 2를 약수로 가지는 수 - (n-r)!의 2를 약수로 가지는 수) 중에 최소값을 구하면 된다.

    ● 코드

    package acmicpc;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.util.Arrays;
    
    public class acmicpc2004 {
    	public static void main(String[] agrs) {
    		try {
    			BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    			BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
    			
    			int intArr[] = Arrays.stream(reader.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
    			int n = intArr[0];
    			int m = intArr[1];
    
    			int answer[][] = {% raw %}{{n, 0, 0}, {n-m, 0, 0}, {m, 0, 0}}{% endraw %}; //num, 5 약수개수, 2 약수개수
    			int cnt = 0;
    			
    			if(m >= 1) {
    				for(int i=0; i<3; i++) {
    					int num = answer[i][0];
    					cnt = 0;
    					int jisu = 1;
    					
    					//5 약수개수
    					while(true) {
    						int quotient = num / (int)Math.pow(5, jisu++);
    						if(quotient > 0) {
    							cnt += quotient;
    						} else {
    							answer[i][1] = cnt;
    							break;
    						}
    					}
    					
    					cnt = 0;
    					jisu = 1;
    					
    					//2 약수개수
    					while(true) {
    						int quotient = num / (int)Math.pow(2, jisu++);
    						if(quotient > 0) {
    							cnt += quotient;
    						} else {
    							answer[i][2] = cnt;
    							break;
    						}
    					}
    				}
    				
    				writer.append(String.valueOf(Math.min(answer[0][1] - answer[1][1] - answer[2][1], answer[0][2] - answer[1][2] - answer[2][2])));
    			} else if(m < 1) {
    				writer.append(String.valueOf(cnt));
    			}
    			
    			writer.flush();
    			writer.close();
    		} catch (Exception e) {
    			
    		}
    	}
    }
    728x90
    반응형
    저작자표시 (새창열림)

    '개발 > 백준알고리즘' 카테고리의 다른 글

    25304번_영수증_java  (0) 2022.12.08
    3003번_킹, 퀸, 룩, 비숍, 나이트, 폰_java  (1) 2022.12.08
    24416번_알고리즘 수업 - 피보나치 수 1_java  (0) 2022.12.08
    1676번_팩토리얼 0의 개수_java  (0) 2022.12.08
    9375번_패션왕 신해빈_java  (0) 2022.12.08
      '개발/백준알고리즘' 카테고리의 다른 글
      • 3003번_킹, 퀸, 룩, 비숍, 나이트, 폰_java
      • 24416번_알고리즘 수업 - 피보나치 수 1_java
      • 1676번_팩토리얼 0의 개수_java
      • 9375번_패션왕 신해빈_java
      syk531
      syk531
      기억을 위해 기록을.

      티스토리툴바