백준 지각

KIMYEONGJUN·2025년 4월 17일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

창영이가 궁금한 경우의 수 T(1 ≤ T ≤ 100)가 첫 번째 줄에 주어지고, 이어서 T 개의 줄에 수업시간 d(1 ≤ d ≤ 10,000, d는 정수)가 차례대로 주어진다.

수업시간에 따른 교수님이 지각할 수 있는 최대 시간 t를 정수로 구해서 출력한다.

내가 이 문제를 보고 생각해본 부분

문제에서 주어진 조건을 t + t^2 <= d 를 만족하는 최대 정수 t를 찾는 것이다.
이를 이차방정식 t + t^2 - d <= 0로 바꿀 수 있다.
근의 공식을 통해 t = (-1 + Math.sqrt(1 + 4L * d)) / 2; 중 양수 해를 선택해준다.
정수 t는 이 값을 내림하여 구해준다.
입력과 출력을 BufferedReader, BufferedWriter를 써서 처리해준다.

코드로 구현

package baekjoon.baekjoon_27;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;

// 백준 10419번 문제
public class Main994 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int T = Integer.parseInt(br.readLine());

        for(int i = 0; i < T; i++) {
            int d = Integer.parseInt(br.readLine());

            // t + t^2 <= d 인 최대 t 찾기
            // 즉, t^2 + t - d <= 0 인 최대 정수 t
            // 이차방정식 근의 공식으로 근을 구한 뒤 내림 처리
            int t = (int)((-1 + Math.sqrt(1 + 4L * d)) / 2);

            bw.write(t + "\n");
        }

        bw.flush();
        bw.close();
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글