반응형
백준 18312번 문제입니다. (solved.ac) 기준 브론즈 2 문제입니다.
https://www.acmicpc.net/problem/18312
문제
문제 접근
어렵지 않은 완전탐색 문제입니다.
첫 번째 줄에 n, k 를 입력 받고 00시 00분 00초 ~ n시 59분 59초까지중 k라는 숫자(문자)가 포함된 횟수를 출력하면 됩니다.
while문을 통하여 sec을 1씩 늘려주며 완전탐색하도록 구현하였습니다.
문자로 접근하여 풀면 02시 05분 07초와 같은 시간을 탐색하기 위하여 앞에 문자 0을 붙여주어야합니다.
이러한 번거로움을 피하고자 시, 분, 초 별 십의 자리(secFir 등) 일의 자리(secSec)을 분리하여 주었습니다. 십의 자리에는 현재 시,분,초 / 10이, 일의 자리에는 현재 시,분,초 % 10이 들어갑니다. 만약 현재 5초라면 십의자리(secFir)에는 0이 일의자리(secSec)에는 5가 들어가게됩니다.
정답 코드
fun main() {
val (n, k) = readln().split(" ").map { it.toInt() }
var sec = 0
var min = 0
var hour = 0
// k가 나온 횟수
var ans = 0
// n이 12일 때 12시 59분 59초까지 탐색
while (hour <= n) {
// 12초 기준 1부분 (십의 자리)
val secFir = sec / 10
// 12초 기준 2부분 (일의 자리)
val secSec = sec % 10
// 34분 기준 3부분 (십의 자리)
// 34분 기준 4부분 (일의 자리)
val minFir = min / 10
val minSec = min % 10
// 23시간 기준 2부분 (십의 자리)
val hourFir = hour / 10
// 23시간 기준 3부분 (일의 자리)
val hourSec = hour % 10
// k가 현재 탐색중인 시간에 포함되어있다면 ans 1 증가
if (secFir == k || secSec == k
|| minFir == k || minSec == k
|| hourFir == k || hourSec == k
) ans++
// 완전탐색을 위하여 1초 증가
sec++
// 초 -> 분, 분 -> 시 로의 변환이 필요한가?
var needToUp = false
// 60초 -> 01분
if (sec >= 60) {
sec -= 60
needToUp = true
}
if (needToUp) {
min++
needToUp = false
}
// 60분 -> 01시
if (min >= 60) {
min -= 60
needToUp = true
}
if (needToUp) {
hour++
}
}
print(ans)
}
반응형
'알고리즘 문제풀이[Algorithm]' 카테고리의 다른 글
[백준] 1120번 문자열(브루트포스 - 완전탐색)[Kotlin - 코틀린] (0) | 2022.07.01 |
---|---|
[백준] 1145번 적어도 대부분의 배수(브루트포스 - 완전탐색)[Kotlin - 코틀린] (0) | 2022.07.01 |
[백준] 1747 소수&팰린드롬(브루트포스 - 완전탐색)[Kotlin - 코틀린] (0) | 2022.06.30 |
[백준] 1236번 성 지키기(브루트 포스 - 완전탐색)[Kotlin - 코틀린] (0) | 2022.06.30 |
[백준] 10448번 유레카 이론(브루트포스 - 완전탐색)[Kotlin - 코틀린] (0) | 2022.06.30 |
최근댓글