알고리즘

[백준, 자바, 1333번] 부재중 전화

hminor 2024. 1. 2. 17:28

풀이

  • 처음 해당 문제를 해결하고자 했을 때는 
  • 좀 다르게 접근해버려서 고민을 했는데 
  • 우선 결정적으로 해결하게 된 방법으로는 
  • 조건식으로 노래 끝나는 시간과 휴식이 끝나는 시간 사이에 
  • 벨 울리는 시간이 있는지 확인하면 되는데
  • 이때 놓치고 있던 부분이 
    • e_song <= bell <= e_rest
  • 이렇게 하니까 5초를 넘어가다보니 문제가 생겨 아래와 같이 작성하여 해결.

 

import java.io.*;
import java.util.*;

public class 부재중전화 {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        Integer n = Integer.parseInt(st.nextToken());
        Integer l = Integer.parseInt(st.nextToken());
        Integer d = Integer.parseInt(st.nextToken());

        Long e_song = 0L;
        Long e_rest = 0L;
        Long bell = 0L;

        for (int i = 0; i < n; i++) {
            e_song += l;
            e_rest = e_song+5;
            while (e_rest > bell) {
                if (e_song <= bell && bell < e_rest) {
                    System.out.println(bell);
                    System.exit(0);
                } else bell += d;
            }
            e_song = e_rest;
        }
        System.out.println(bell);
    }
}