티스토리 뷰

import java.io.*;
import java.util.*;

class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
ArrayList<Integer> arrayList = new ArrayList<>();
int n = Integer.parseInt(in.readLine());
for(int a=2; a<=n; ++a) {
int number = a;
for(int i=2; i*i<=number; ++i) {
while(number % i == 0) {
arrayList.add(i);
number /= i;
}
}
if(number > 1) {
arrayList.add(number);
}
}
int numberOfTwo = 0;
int numberOfFive = 0;
int size = arrayList.size();
for(int i=0; i<size; ++i) {
int element = arrayList.get(i);
if(element == 2) {
numberOfTwo++;
} else if(element == 5) {
numberOfFive++;
}
}
System.out.println(numberOfTwo < numberOfFive ? numberOfTwo : numberOfFive);
}
}


입력 범위가 500까지이므로 이걸 팩토리얼 구해서 하는 건 말이 안되고

규칙을 찾아보아야 한다.


수를 소인수분해했을 때 10(2*5)의 개수가 곧 0의 개수이므로

2에서부터 입력된 수까지 쭉 소인수분해하여 배열에 넣어주고

2와 5의 수를 세어 10의 개수를 세었다.




import Foundation


var array = [Int]()

let n = Int(readLine()!)!

for a in stride(from: 2, through: n, by: 1) {

    var number = a

    for i in stride(from: 2, through: Int(sqrt(Double(number))), by: 1) {

        while number % i == 0 {

            array.append(i)

            number /= i

        }

    }

    if number > 1 {

        array.append(number)

    }

}

var numberOfTwo = 0

var numberOfFive = 0

let count = array.count

for element in array {

    if element == 2 {

        numberOfTwo += 1

    } else if element == 5 {

        numberOfFive += 1

    }

}

print(numberOfTwo < numberOfFive ? numberOfTwo : numberOfFive)



'Algorithm > Baekjoon Online Judge' 카테고리의 다른 글

2751번 '수 정렬하기 2'  (0) 2018.08.04
2004번 '조합 0의 개수'  (0) 2018.08.01
10872번 '팩토리얼'  (0) 2018.08.01
11653번 '소인수분해'  (0) 2018.08.01
6588번 '골드바흐의 추측'  (0) 2018.08.01
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함