https://www.acmicpc.net/problem/5587
5587번: 카드 캡터 상근이
1번째 줄에 상근이의 점수를 출력하고, 2번째 줄에 근상이의 점수를 출력한다.
www.acmicpc.net
package BOJ.simulation;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.function.Function;
public class BOJ_5587 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Function<String, Integer> stoi = Integer::parseInt;
int n = stoi.apply(br.readLine());
int[][] input = new int[2][n];
Set<Integer> set = new HashSet<>();
for (int i = 0; i < n; i++) {
input[0][i] = stoi.apply(br.readLine());
set.add(input[0][i]);
}
Arrays.sort(input[0]);
int index = 0;
for (int i = 1; i <= 2 * n; i++) {
if (!set.contains(i)) {
input[1][index++] = i;
}
}
cal(input, n);
}
private static void cal(int[][] input, int n) {
boolean[][] used = new boolean[2][n];
int index1 = 0;
int index2 = 0;
int number = 0;
while (true) {
if(isFinish(used,n)){
break;
}
while (index1 < n && (number > input[0][index1] || used[0][index1]) ) {
index1++;
}
if(index1 >= n){
number = 0;
index1 = 0;
index2 = 0;
while (index2 < n && (used[1][index2] && used[1][index2]) ) {
index2++;
}
}else{
used[0][index1] = true;
number = input[0][index1];
}
if(isFinish(used,n)){
break;
}
while (index2 < n && (number > input[1][index2] || used[1][index2]) ) {
index2++;
}
if(index2 >= n){
number = 0;
index1 = 0;
index2 = 0;
while (index1 < n && (used[0][index1] || used[0][index1]) ) {
index1++;
}
}else{
used[1][index2] = true;
number = input[1][index2];
}
}
int[] cnt = new int[2];
for (int i = 0; i < n; i++) {
if (!used[0][i]) {
cnt[0]++;
}
if (!used[1][i]) {
cnt[1]++;
}
}
System.out.println(cnt[1]);
System.out.println(cnt[0]);
}
private static boolean isFinish(boolean[][] used,int n) {
boolean[] finish = new boolean[2];
Arrays.fill(finish,true);
for(int i = 0 ; i < n ; i++){
if(!used[0][i]){
finish[0] = false;
}
if(!used[1][i]){
finish[1] = false;
}
}
return finish[0] | finish[1];
}
}
'알고리즘' 카테고리의 다른 글
백준 13265번 색칠하기 (JAVA) (0) | 2023.03.04 |
---|---|
백준 16568번 엔비스카의 영혼 (JAVA) (0) | 2023.03.03 |
백준 20162번 간식 파티 (JAVA) (0) | 2023.03.01 |
백준 15723번 n단 논법 (JAVA) (0) | 2023.02.28 |
백준 4889번 안정적인 문자열 (JAVA) (0) | 2023.02.27 |