Computer Science
탄탄한 기반 실력을 위한
전공과 이론 지식 모음
Today I Learned!
배웠으면 기록을 해야지
TIL 사진
Flutter 사진
Flutter로 모바일까지
거꾸로캠퍼스 코딩랩 Flutter 앱개발 강사
스파르타코딩클럽 즉문즉답 튜터
카카오테크캠퍼스 3기 학습코치
프로필 사진
박성민
임베디드 세계에
발을 들인 박치기 공룡
임베디드 사진
EMBEDDED SYSTEM
임베디드 SW와 HW, 이론부터 실전까지
ALGORITHM
알고리즘 해결 전략 기록
🎓
중앙대학교 소프트웨어학부
텔레칩스 차량용 임베디드 스쿨 3기
애플 개발자 아카데미 1기
깃허브 사진
GitHub
프로젝트 모아보기
Instagram
인스타그램 사진

Develop/알고리즘

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

sm_amoled 2022. 1. 4. 20:17

문제링크

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

문제

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

입력

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

출력

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

조건

  • 시간 제한 : 2s
  • 메모리 제한 : 128MB

해설

1부터 N까지의 수들을 곱했을 때, 그 수에 10이 몇 번 곱해질 수 있는 지를 묻는 문제이다. 10을 만들기 위해 2와 5가 사용되고, 2는 짝수에 모두 포함되어 있기 때문에, 5의 개수만 세어주면 된다. 소인수분해 했을 때 5가 포함되는 값들은 5의 배수이고, 25의 배수는 5가 2개, 125의 배수는 5가 3개 포함된다.

풀이

5의 배수, 25의 배수, 125의 배수를 헤아리는 방법은 해당 값으로 N을 나눴을 때의 몫을 더하면 된다. 2의 개수는 충분하므로, 5가 몇개 있는지가 10을 몇 번 곱할 수 있는지와 같다. 5의 개수를 출력해주면 원하는 결과를 얻을 수 있다.

int N, result = 0;
cin >> N;

result += N/5;
result += N/25;
result += N/125;

cout << result;

코멘트

소인수분해를 이용하는 문제. 수학 1 카테고리에 있는 문제들은 다 난이도가 그렇게 높지 않은 문제들인 것 같다.


코드

#include <iostream>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    int N, result = 0;
    cin >> N;
    
    result += N/5;
    result += N/25;
    result += N/125;
    
    cout << result;
    return 0;
}

320x100

'Develop > 알고리즘' 카테고리의 다른 글

[백준] 2170 - 선 긋기  (0) 2022.01.04
[백준] 1934 - 최소공배수  (0) 2022.01.04
[백준] 1780 - 종이의 개수  (0) 2022.01.04
[백준] 1976 - 여행 가자  (0) 2022.01.04
[백준] 2630 - 색종이 만들기  (0) 2022.01.04