[알고리즘] 백준 1676 (파이썬 풀이)

    728x90

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

     

    1676번: 팩토리얼 0의 개수

    N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.

    www.acmicpc.net

    문제

    N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.

    입력

    첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500)

    출력

    첫째 줄에 구한 0의 개수를 출력한다.

     

    해결코드

    from math import factorial
    
    n = int(input())
    m = list(str(factorial(n)))
    m.reverse()
    cnt = 0
    for i in m:
        if(i=='0'):
            cnt += 1
        else:
            break
    print(cnt)

    해결코드

     

    처음에 문제를 이해를 못해서 쩔쩔매다가 겨우 이해했다...

    예를 들어 5!이면 120이니까 뒤에서부터 0이 1개 있는 것이고

    문제에서 n!을 했을 때 그 값의 뒤에서부터 0이 몇 개 있는지 세서 출력하면 되는 문제이다.

     

    코드 풀이를 하면 일단

    factorial 함수를 쓰기 때문에 math 라이브러리를 임포트 한다.

    int(input())으로 n을 입력받고

    m에는 n을 factorial 한 수를 문자열로 변환하여 한글자씩 list에 넣어준다.

    그리고 m.reverse()를 통해 list를 거꾸로 뒤집어준다.(0이 앞으로감)

    문제에서 0이 뒤에서부터 처음으로 끊길때까지의 0의 개수를 구하고 했으니 절대 sort같은 방법을 사용하면 안된다

    --> sort하게되면 모든 0이 앞으로 가게 됨

    일단 cnt를 선언하고 초기값을 0으로 정한다.

    이제 m의 원소를 하나씩 검사하기 위해 for문을 돌린다.

    만약 i가 '0'이라면 cnt값을 +1하고

    '0'이 아니라면 멈추고 for문을 나온다.

    cnt값을 출력해준다. 

     

    728x90

    댓글