내가 생각했을때 문제에서 원하는부분
창영이가 궁금한 경우의 수 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();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.