π οΈ λ¬Έμ π οΈ
ποΈ μ€λͺ ποΈ
μ΄ λ¬Έμ λ₯Ό μ²μ λ΄€μ λ λΉμ°ν μ΄λΆνμμΌλ‘ νμ΄μΌ κ² λ€κ³ μκ°νλ€.
ꡬν΄μΌν μνμ‘μ [0 ~ μμ²ν κΈμ‘ μ€ κ°μ₯ ν° κ°] ꡬκ°μμ μ΄λΆνμμ νλ€.
μλμ μ½λλ μ΄λ₯Ό ꡬνν κ²μ΄λ€.
μ΄λ solve(mid) λ λ°°μ λ μμ°μ ν©μ λ°ννλ€.
μ΄λ₯Ό κΈ°μ€μΌλ‘ startμ endλ₯Ό λ³κ²½ν΄κ°λ©° μ΅λ μνμ‘μ μ°Ύλλ€.
int start = 0;
int end = max;
while(start <= end) {
int mid = (start + end) / 2;
if(solve(mid) > m) {
end = mid - 1;
}
else {
start = mid + 1;
}
}
bw.write(end + "");
νμ§λ§ λλ²μ§Έ λ°©λ²μ΄ μκ°λμ μ΄ κΈμ μμ±ν΄λ³Έλ€.
μΌλ°μ μΌλ‘ 곡ννκ² λ°μ μ μλ μνμ‘ = μ΄ μμ° / μ§λ°©μ μ = m / n
λ§μ½μ μ΄ μμ°μ΄ μμ²ν μμ°λ€μ ν©λ³΄λ€ ν¬λ©΄
→ μμ²ν μμ° μ€ μ΅λκ°λ§νΌ μνμ‘μ μ€μ νλ©΄ λλ€.
μ΄ μμ°μ΄ μμ²ν μμ°λ€μ ν©λ³΄λ€ μμΌλ©΄
→ 곡ννκ² λ°μ μ μλ μνμ‘μμ 1μ© μ¦κ°νλ©° λ°°μ λ μμ°μ κ³μ°ν΄λ³Έλ€.
→ λ°°μ λ μμ°μ΄ μ΄ μμ°λ³΄λ€ 컀μ§λ©΄ λ©μΆλ€.
μ΄λ₯Ό μ½λλ‘ κ΅¬ννλ©΄ μλμ κ°λ€.
if(sum <= m) {
bw.write(max + "");
}
else {
int current = m / n;
while(true) {
if(solve(current) > m) break;
current++;
}
bw.write(current - 1 + "");
}
κ²°κ³Όλ₯Ό λΉκ΅ν΄λ³΄λ©΄ μ΄λΆνμμ μ¬μ©ν λ°©λ²μ΄ ν¨μ¨μ μ΄λ€.
μ΄λΆνμμ ν΅ν΄ μ°Ύμκ°λ λ°©λ²μ ꡬκ°μμ μ€κ°κ°μ μ°Ύμμ νμνλ―λ‘ νκ· μ μΈ μκ°μ΄ 걸릴 κ²μ΄λ€.
νμ§λ§ λ΄κ° λλ²μ§Έλ‘ μκ°ν λ°©μμ μ΅μκ°κ³Ό ꡬνκ³ μ νλ κ°μ μ°¨μ΄κ° μμ λ ν¨μ¨μ μΌ κ²μ΄λ€.
4
1 1 1 500
500
μμ κ°μ μ λ ₯μ΄ λ€μ΄μμ κ²½μ° 125λΆν° 1μ© μ¦κ°νλ©° 497μ ꡬνκ² λλ€.
μ΄μ²λΌ κ°λ€μ μ°¨κ° ν΄ κ²½μ° μ λ ₯μ΄ κΈΈμ΄μ§μλ‘ μ€λ 걸릴 μ μλ€.
λͺ¨λ λ§λ νμ΄μ§λ§ ν¨μ¨μ±μ λ°μ§λ©΄ μ΄λΆνμμ΄ μ ν©νλ€.
π νμ΄ π
1οΈβ£ μ΄λΆνμ νμ΄
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static int[] requests;
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 n = Integer.parseInt(br.readLine());
requests = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
int max = 0;
for(int i = 0; i < n; i++) {
requests[i] = Integer.parseInt(st.nextToken());
max = Math.max(max, requests[i]);
}
int m = Integer.parseInt(br.readLine());
int start = 0;
int end = max;
while(start <= end) {
int mid = (start + end) / 2;
if(solve(mid) > m) {
end = mid - 1;
}
else {
start = mid + 1;
}
}
bw.write(end + "");
bw.flush();
bw.close();
}
static int solve(int current) {
int answer = 0;
for(int i = 0; i < requests.length; i++) {
answer += current >= requests[i] ? requests[i] : current;
}
return answer;
}
}
2οΈβ£ κ°λ₯ν μνμ‘ μ€ μ΅μλ₯Ό κ³μ° ν μ΅λκ° κ΅¬νκΈ°
package Baekjoon;
import java.io.*;
import java.util.StringTokenizer;
public class BinarySearch2512 {
static int[] requests;
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 n = Integer.parseInt(br.readLine());
requests = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
int sum = 0;
int max = 0;
for(int i = 0; i < n; i++) {
requests[i] = Integer.parseInt(st.nextToken());
sum += requests[i];
max = Math.max(max, requests[i]);
}
int m = Integer.parseInt(br.readLine());
if(sum <= m) { //μμ² μμ°μ ν©μ΄ μ 체 μμ°λ³΄λ€ μμ κ²½μ°
bw.write(max + ""); //κ°μ₯ μμ²μ΄ ν° μ‘μμ λ§μΆλ€.
}
else {
int current = m / n; //곡ννκ² λλ΄μ κ²½μ°λΆν° νμ
while(true) {
if(solve(current) > m) break;
current++;
}
bw.write(current - 1 + "");
}
bw.flush();
bw.close();
}
static int solve(int current) {
int answer = 0;
for(int i = 0; i < requests.length; i++) {
answer += current >= requests[i] ? requests[i] : current;
}
return answer;
}
}
'ProgramSolve > Baekjoon' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] 1068λ² - νΈλ¦¬ (Java) (0) | 2024.02.01 |
---|---|
[BOJ] 5397λ² - ν€λ‘κ±° (Java) (2) | 2024.01.28 |
[BOJ] 13904λ² - κ³Όμ (Java) (2) | 2024.01.05 |
[BOJ] 31066λ² - λΉ μ€λ λ (Java) (2) | 2024.01.02 |
[BOJ] 12919λ² - Aμ B 2 (Java) (0) | 2023.12.24 |