개발새발 - IT 기술블로그
article thumbnail

백준 알고리즘 2525 - 코틀린 풀이

 

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

 

2525번: 오븐 시계

첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)

www.acmicpc.net

 


 

문제

 

 

 

전체 코드

import java.util.*


fun main() {
    val sc = Scanner(System.`in`)
    val A = sc.nextInt()
    val B = sc.nextInt()
    val C = sc.nextInt()

    val sum = 60 * A + B + C// A와 B를 분으로 변환한 것에 C를 더함

    var hours = sum / 60
    val minutes = sum % 60

    if (hours >= 24) {
        hours -= 24
    }

    println("$hours $minutes")
    sc.close()
}

 

풀이

 

이번 문제는 첫번째 줄에 입력한 시간(A B)에 두번째 줄에 입력한 시간(C)을 더해서 출력하는 문제입니다.

 

이전 문제였던 알람 시계 문제와 매우 유사합니다. (알람 시계는 45분을 빼주는 거였죠.)

 

기본적인 풀이 방식은 아래와 같습니다.

1. A B를 분으로 변환 합니다.

2. C를 변환한 분에 더합니다.

3. 더한 수를 다시 시간 형식으로 변환합니다.

 

이 때, 신경써야 할 점이 있습니다.

● 분이 59보다 커지면 시간이 1 증가하고 분이 0으로 초기화 되어야 합니다.

● 시간이 23시가 지나면 0시로 돌아와야 합니다.

하지만 첫번째 조건은 A B 를 분으로 바꾸고 더해주기 때문에 논외가 되었네요.

 

핵심은 분으로 변환하였을 때 한 시간인 60으로 나눈 몫이 시간이 되고 나머지가 분이 된다는 겁니다.

 

시간은 조건에 맞게 값이 변경되어야하기 때문에 var 타입으로 생성했습니다.

val sum = 60 * A + B + C // A와 B를 분으로 변환한 것에 C를 더함

var hours = sum / 60	// 시간
val minutes = sum % 60	// 분

 

이제, 위에서 말씀드린 신경써야 할 부분을 조건문으로 처리해야 합니다. 사실 이게 핵심이죠.

 

그럼 시간이 24이상인지 아닌지 검사해보겠습니다.

if (hours >= 24) {
    hours -= 24
}

 

24시가 넘으면 24를 빼주는 형태로 구현하였습니다.

 

 

이제 시간과 분 형태로 출력해주시면 마무리됩니다.

println("$hours $minutes")
sc.close()

 

 

감사합니다.