https://www.acmicpc.net/problem/31091
νμ΄
μλ₯Όλ€μ΄, N = 5λͺ μ΄κ³ , κ°μ λ€μκ³Ό κ°μ΄ μ£Όμ₯νκ³ μλ€
[ 1, 4, 3, 5, 2 ]
μ΄ μν©μμ κ±°μ§λ§ν μ¬λμ μκ° 3λͺ μ΄ κ°λ₯νμ§ νμΈνκ³ μΆλ€λ©΄
1. λ°°μ΄μ μ λ ¬νλ€ : [ 1, 4, 3, 5, 2 ] ==> [ 1, 2, 3, 4, 5 ]
2. (μ¬λμ μ − 3λ³΄λ€ μ΅μ΄λ‘ ν° κ°μ μΈλ±μ€) = 5 - 3 = 2
3. 2 != 3
∴ κ±°μ§λ§ν μ¬λμ΄ 3λͺ μ΄ λ μ μλ€.
μ΄λ° μμΌλ‘ κ°λ₯ν κ±°μ§λ§μμ΄μ μλ₯Ό 0λΆν° NκΉμ§ λλ €λ³΄κ³ , μ΄λΆνμ(upper bound)λ‘ μ€μ κ±°μ§λ§ν μΈμμ νμΈνκ³ λΉκ΅ν΄μ£Όλ©΄ λλ€. λ€λ§ μμμ μμλ λ°λ‘ λ€λ₯Έ λ°°μ΄μ μ μ₯ν΄μ λλ €μΌνκ³ , μμ λ°°μ΄μμ μ΄λΆνμ λ릴 λ λͺ©νκ°μ μμλ‘ λ°κΏμ£Όλ κ²λ§ μ‘°μ¬ν΄μ£Όλ©΄ λλ€.
μ½λ
import java.io.*;
import java.util.*;
public class Main {
public static int upperBoundBinarySearch(ArrayList<Integer> list, int target) {
int left = 0;
int right = list.size();
while (left < right) {
int mid = (left + right) / 2;
if (target < list.get(mid)) {
right = mid;
} else {
left = mid + 1;
}
}
return left;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
ArrayList<Integer> pos = new ArrayList<>();
ArrayList<Integer> neg = new ArrayList<>();
for (int i = 0; i < N; i++) {
int temp = Integer.parseInt(st.nextToken());
if (temp > 0) {
pos.add(temp);
} else {
neg.add(temp);
}
}
Collections.sort(pos);
Collections.sort(neg);
int answer = 0;
StringBuilder sb = new StringBuilder();
for (int lier = 0; lier <= N; lier++) {
int actualLier = 0;
actualLier += (neg.size() - upperBoundBinarySearch(neg, -1 * lier));
actualLier += (pos.size() - upperBoundBinarySearch(pos, lier));
if (lier == actualLier) {
answer++;
sb.append(lier).append(' ');
}
}
System.out.println(answer);
System.out.println(sb);
br.close();
}
}
νκΈ°
κ°μΈμ μΌλ‘ 골λ5보λ€λ μ΄λ ΅λ€κ³ λλ λ¬Έμ . μ¬λ¬κ°μ§ νμ΄κ° κ°λ₯ν κ² κ°λ€. λ€λ€ μμ λΉμ·ν κ°λ μΌλ‘ λμ ν©μ μ¬μ©ν κ² κ°κ³ , ν¬ ν¬μΈν°λ κ°λ₯νλ€κ³ νλ€.
'Problem Solving' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] λ°±μ€ 1999 - μ΅λμ΅μ (0) | 2024.03.01 |
---|---|
[Java] λ°±μ€ 16946 - λ²½ λΆμκ³ μ΄λνκΈ° 4 (0) | 2024.02.29 |
[Java] λ°±μ€ 31423 - μ μ΄ ν΅νν© κ³ν (0) | 2024.02.21 |
[Java] λ°±μ€ 31248 - 3+1 νλ Έμ΄ ν (0) | 2024.02.01 |
[C++] λ°±μ€ 17073 - λ무 μμ λΉλ¬Ό (0) | 2023.02.04 |