[yukicoder] No.296 n度寝
時刻に関する問題
アルゴリズムの問題で時刻に関するものは色々あると思いますが、今回はyukicoderで出された問題を考えたいと思います。
考え方
この問題で初めてアラームが鳴る時刻は、 時 分です。時刻の単位を分だけで表すと一日のある時刻 は、 分になります。 この考えのもとに問題を解きます。
解法
ここで、
とします。
ユキさんがアラームが鳴ってから寝る時間 は、
となります。 から、最終的な起床時刻を考えると、
または、
となります。ここで、 は を満たすものです。(この方法では、 を満たすことがあります。)
時刻 分を時間を用いて表すには、
時 分となります。 ここで、 のときの時刻は 時 分とします。
コード
import java.util.Scanner; public class Exec0296 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int N = scan.nextInt(); int H = scan.nextInt(); int M = scan.nextInt(); int T = scan.nextInt(); scan.close(); int t = H * 60 + M; int max = 24 * 60; int k = ((N - 1) * T) % max; //System.out.println(k); int m = 0; if(k <= max - t) { m = t + k; }else { m = k - (max - t); } int ans1 = m / 60; int ans2 = m % 60; if(ans1 == 24) { System.out.println(0); System.out.println(0); System.exit(0); } System.out.println(ans1); System.out.println(ans2); } }