[백준] 폭죽쇼 (1773)(kotlin)
문제 설명
입력 및 출력
» 입력
첫 줄에 폭죽을 터뜨리는 학생의 수 N(1 ≤ N ≤ 100)과 폭죽쇼가 끝나는 시간 C(1 ≤ C ≤ 2,000,000)가 주어진다. 그 다음 N개의 줄에는 학생들이 폭죽을 터뜨리는 주기가 한 줄에 하나씩 주어진다. 주기는 1보다 크거나 같고, C보다 작거나 같은 자연수이다.
» 출력
폭죽쇼가 시작되고 끝날 때까지 밤하늘에 폭죽을 볼 수 있는 총 시간을 출력한다.
예제 입출력(테스트케이스)
입력 | 출력 |
---|---|
2 20 4 6 |
7 |
문제 힌트
2
1 2 1 1 1 2 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 위의 그림에서 1,2가 쓰여있는 4, 6, 8, 12, 16, 18, 20초에 폭죽이 밤 하늘에 터진다. 단 12초에는 두 폭죽이 동시에 하늘에 터지지만 한번으로 세는 것에 주의하자.
문제 풀이1
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
val (N, C) = readLine().split(" ").map { it.toInt() }
val ab = mutableListOf<Int>()
var check = BooleanArray(C + 1) { false }
repeat(N) {
ab.add(Integer.parseInt(readLine()))
}
for (i in 1..C)
if (ab.any { i % it == 0 })
check[i] = true
println(check.count { it })
}
문제 풀이2
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
val (N, C) = readLine().split(" ").map { it.toInt() }
var check = BooleanArray(C + 1) { false }
var count = 0
for (i in 1..N) {
val student = Integer.parseInt(readLine())
for (j in 1..C / student) {
if (!check[j * student]) {
count++
check[j * student] = true
}
}
}
println(count)
}