Algorithm๐Ÿฅ‡

1676.ํŒฉํ† ๋ฆฌ์–ผ0์˜๊ฐœ์ˆ˜

hae02y 2023. 10. 19. 15:57
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

N!์—์„œ ๋’ค์—์„œ๋ถ€ํ„ฐ ์ฒ˜์Œ 0์ด ์•„๋‹Œ ์ˆซ์ž๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ 0์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. (0 ≤ N ≤ 500)

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊ตฌํ•œ 0์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ œ์ถœ ์ •๋‹ต ๋งžํžŒ ์‚ฌ๋žŒ ์ •๋‹ต ๋น„์œจ
2 ์ดˆ 128 MB 70550 33569 28012 47.323%

https://www.acmicpc.net/problem/1676

ํ’€์ด

์•Œ๊ณ ๋ฆฌ์ฆ˜

์ด๋ฌธ์ œ๋Š” ์ž…๋ ฅ๊ฐ’์„ ์ž˜ ์‚ดํŽด์•ผํ•œ๋‹ค. (0 ≤ N ≤ 500)์˜ ๋ฒ”์œ„๋กœ 500! ์ด๋ผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

1220136825991110068701238785423046926253574342803192842192413588385845373153881997605496447502203281863013616477148203584163378722078177200480785205159329285477907571939330603772960859086270429174547882424912726344305670173270769461062802310452644218878789465754777149863494367781037644274033827365397471386477878495438489595537537990423241061271326984327745715546309977202781014561081188373709531016356324432987029563896628911658974769572087926928871281780070265174507768410719624390394322536422605234945850129918571501248706961568141625359056693423813008856249246891564126775654481886506593847951775360894005745238940335798476363944905313062323749066445048824665075946735862074637925184200459369692981022263971952597190945217823331756934581508552332820762820023402626907898342451712006207714640979456116127629145951237229913340169552363850942885592018727433795173014586357570828355780158735432768888680120399882384702151467605445407663535984174430480128938313896881639487469658817504506926365338175055478128640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

๊ต‰์žฅํžˆ ํฐ์ˆ˜์ด๊ธฐ๋•Œ๋ฌธ์— Long์˜ ๋ฒ”์œ„๋„ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๊ณ , BigInteger๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ•ด์•ผํ•œ๋‹ค. ์ด๊ฒƒ๋ณด๋‹ค ์‰ฝ๊ฒŒ ํ’€์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

์ผ๋‹จ ๋’ท์ž๋ฆฌ๊ฐ€ 0์ด ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋Š” ์–ธ์ œ์ธ์ง€ ์ƒ๊ฐํ•ด๋ณด๋ฉด, 2์™€ 5๊ฐ€ ๊ณฑํ•ด์งˆ๋•Œ๋‹ค. ์ฆ‰, ์†Œ์ธ์ˆ˜๋ถ„ํ•ด๋ฅผ ํ•ด์„œ 2์™€ 5๊ฐ€ ์กด์žฌํ• ๊ฒฝ์šฐ ๋’ท์ž๋ฆฌ๋Š” 0์œผ๋กœ ๋๋‚œ๋‹ค.

  • 5! - 120 (1)
  • 10! - 3628800 (2)
  • 15! - 1307674368000 (3)
  • 20! - 2432902008176640000 (4)
  • 25! - 15511210043330985985984000000 (6)

๊ทธ๋ฆฌ๊ณ  ์ž…๋ ฅ๊ฐ’์ด 25์ผ๋•Œ๋Š” ์นด์šดํŠธ๊ฐ€ 2 ์ฆ๊ฐ€ํ•œ๋‹ค.

๋’ท์ž๋ฆฌ์— 0์ด n๊ฐœ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋Š” 2์™€ 5๊ฐ€ n๊ฐœ์”ฉ ์ง์ง€์–ด ์กด์žฌํ•œ๋‹ค๋Š” ๋“ฏ์ด๋‹ค. ํŒฉํ† ๋ฆฌ์–ผ ๊ฐ’์—์„œ 2๋Š” 5๋ณด๋‹ค ์ž‘์€์ˆ˜์—ฌ์„œ ์—ฐ์†๋œ ์ˆ˜๋ฅผ ๊ณฑํ•˜๊ฒŒ ๋˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ชจ๋“  ๊ฐ’๋“ค์˜ ์†Œ์ธ์ˆ˜ ๋ถ„ํ•ด๋“ค์€ 2์˜ ๊ฐœ์ˆ˜๊ฐ€ 5์˜ ๊ฐœ์ˆ˜๋ณด๋‹ค ๋งŽ๋‹ค.

๋‹ค์‹œ๋งํ•ด 5์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ๊ฐ’์ด ๋ณ€ํ™”ํ•œ๋‹ค. 5์˜ n์Šน์— ๋”ฐ๋ผ ์นด์šดํŠธ๊ฐ’์„ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์ฆ‰, ๋‹จ์ˆœํžˆ 5๋กœ ๋‚˜๋ˆŒ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด 5๋กœ ๋‚˜๋ˆ„๋ฉด์„œ ๋ˆ„์ ํ•ฉ์„ ๊ตฌํ•ด์ค€๋‹ค.

์ด๋ฅผ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๋‘๋ฒˆ์งธ์‹œ๋„๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

์ฝ”๋“œ

์ฒซ๋ฒˆ์งธ์‹œ๋„

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.math.BigInteger;  

public class ํŒฉํ† ๋ฆฌ์–ผ0์˜๊ฐœ์ˆ˜ {  
    public static void main(String[] args) throws IOException {  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  

        int n = Integer.parseInt(br.readLine());  
        char[] arr = (String.valueOf(factorial(n))).toCharArray();  
        int count = 0;  

        for(int i=arr.length-1; i>=0; i--){  
            if(arr[i] == '0'){  
                count++;  
            }else{  
                System.out.println(count);  
                break;  
            }  
        }  
        br.close();  
    }  

    public static BigInteger factorial(int n){  

        //biginteger๋กœ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.  
        BigInteger result = new BigInteger(String.valueOf(1)); 

        for(int i=2; i<=n; i++){  

            //๋ฒ”์œ„๊ฐ€ 500๊นŒ์ง€ ์ด๋ฏ€๋กœ 500!์€ Long์˜ ๋ฒ”์œ„๋„ ๋„˜์–ด๊ฐ„๋‹ค.  
            result = result.multiply(BigInteger.valueOf(i)); 
        }  

        return result;  
    }  
}

๋ฌธ์ œ๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ์„๋•Œ ์ƒ๊ฐ๋‚œ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ๊ฐ™๋‹ค.

  1. ํŒฉํ† ๋ฆฌ์–ผ์„ ๋Œ๋ฆฐ ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
  2. ๋’ค์—์„œ ๋ถ€ํ„ฐ 0์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์„œ ์ถœ๋ ฅํ•œ๋‹ค.

ํ•˜์ง€๋งŒ...์‹คํŒจ...

๋ฌธ์ œ๋Š” ์œ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ํ๋ฆ„์— ์ ์–ด๋†“์•˜๋“ฏ 500!๊นŒ์ง€์˜ ๋ฒ”์œ„์—์„œ Long์„ ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ BigInteger๋กœ ์ž‘์„ฑํ•˜๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์˜€๋‹ค.

๋‘๋ฒˆ์งธ ์‹œ๋„

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int num = Integer.parseInt(br.readLine());
        int count = 0;

        while (num >= 5) {
            count += num / 5;
            num /= 5;
        }
        System.out.println(count);
    }

}

์„ฑ๊ณต!!

๋ฐ˜์‘ํ˜•