[백준] 연도 진행바 (1340)(kotlin)
문제 설명Permalink
입력 및 출력Permalink
» 입력Permalink
- 첫째 줄에 Month DD, YYYY HH:MM과 같이 주어진다. Month는 현재 월이고, YYYY는 현재 연도이다. 숫자 네자리이다. DD, HH, MM은 모두 2자리 숫자이고, 현재 일, 시, 분이다. Month는 January, February, March, April, May, June, July, August, September, October, November, December 중의 하나이고, 연도는 1800보다 크거나 같고, 2600보다 작거나 같다. 항상 올바른 날짜와 시간만 입력으로 주어진다.
» 출력Permalink
첫째 줄에 문제의 정답을 출력한다. 절대/상대 오차는 10-9까지 허용한다.
예제 입출력(테스트케이스)Permalink
입력 | 출력 |
---|---|
May 10, 1981 00:31 | 35.348363774733635 |
문제 힌트Permalink
평년일 때, 각 달은 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31일이 있다. 윤년에는 2월이 29일이다. 윤년은 그 해가 400으로 나누어 떨어지는 해 이거나, 4로 나누어 떨어지면서, 100으로 나누어 떨어지지 않는 해 일때이다. 지역에 따른 서머타임은 고려하지 않는다.
문제 풀이1Permalink
import java.io.BufferedReader
import java.io.InputStreamReader
fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))) {
val dateTime = readLine()
.split(",")
.map { it.trim() }
val (month, day) = dateTime[0]
.split(" ")
val (year, time) = dateTime[1]
.split(" ")
val isLeapYear =
if (year.toInt() % 4 == 0) {
if (year.toInt() % 400 == 0 && year.toInt() % 100 == 0) true
else if (year.toInt() % 400 == 0 && year.toInt() % 100 != 0) true
else !(year.toInt() % 400 != 0 && year.toInt() % 100 == 0)
} else {
false
}
if (isLeapYear) {
println(
"%.9f"
.format(
untilToday(
intArrayOf(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
monthToInt(month),
day.toInt() - 1,
time.split(":").map { it.toInt() }
) * 100
)
)
} else {
println(
"%.9f"
.format(
untilToday(
intArrayOf(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
monthToInt(month),
day.toInt() - 1,
time.split(":").map { it.toInt() }
) * 100
)
)
}
}
fun untilToday(year: IntArray, thisMonth: Int, today: Int, currentTime: List<Int>): Double {
var seconds = 0
val dayToSecond = 60 * 60 * 24
for (i in 0 until thisMonth - 1) {
seconds += (dayToSecond * year[i])
}
seconds += (dayToSecond * today)
seconds += (currentTime[0] * 3600 + currentTime[1] * 60)
return seconds.toDouble() / (year.sum().toDouble() * dayToSecond.toDouble())
}
fun monthToInt(month: String): Int {
return when(month) {
"January" -> 1
"February" -> 2
"March" -> 3
"April" -> 4
"May" -> 5
"June" -> 6
"July" -> 7
"August" -> 8
"September" -> 9
"October" -> 10
"November" -> 11
else -> 12
}
}