https://www.acmicpc.net/problem/5587
n이 입력되면 1~2*n까지의 카드가 있고
상근이가 n개를 카드를 받으면 근상이는 나머지 n개의 카드를 가진다.
상근이,근상이가 가진 카드 각각을 ArrayList<Integer>
에 담고 오름차순으로 정렬한다.
카드를 내는 규칙에 따라 어떻게 구현할지 아이디어를 정리해봤다.
currentOnCard = 0
으로 할당한다. if(drawCard>currentOnCard){
currentOnCard = drawCard;
SGcards.remove(i);
break;
}
currentOnCard = 0
로 표현했다.// 상근이가 카드를 낸다.
beforeSize = SGcards.size();
for(int i=0;i<SGcards.size();i++){
// 현재 놓인 카드보다 크면 카드를 내기
int drawCard = SGcards.get(i);
if(drawCard>currentOnCard){
currentOnCard = drawCard;
SGcards.remove(i);
break;
}
}
afterSize = SGcards.size();
// 낼 카드가 없는 경우
if(beforeSize==afterSize){
currentOnCard = 0;
}
import java.io.*;
import java.util.*;
public class _5587 {
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
ArrayList<Integer> SGcards = new ArrayList<>();
ArrayList<Integer> GScards = new ArrayList<>();
for(int i=0;i<n;i++){
SGcards.add(Integer.parseInt(br.readLine()));
}
for(int i=1;i<=2*n;i++){
if(!SGcards.contains(i)){
GScards.add(i);
}
}
Collections.sort(SGcards);
Collections.sort(GScards);
// System.out.println(SGcards);
// System.out.println(GScards);
CardGame(SGcards, GScards);
}
static void CardGame(ArrayList<Integer> SGcards, ArrayList<Integer> GScards){
int currentOnCard = 0; // 현재 놓여있는 카드
int beforeSize = 0;
int afterSize = 0;
// 둘 중 하나라도 전부 비우기 전까지 계속 진행한다.
while(true){
// 상근이가 카드를 낸다.
beforeSize = SGcards.size();
for(int i=0;i<SGcards.size();i++){
// 현재 놓인 카드보다 크면 카드를 내기
int drawCard = SGcards.get(i);
if(drawCard>currentOnCard){
currentOnCard = drawCard;
SGcards.remove(i);
break;
}
}
afterSize = SGcards.size();
// 낼 카드가 없는 경우
if(beforeSize==afterSize){
currentOnCard = 0;
}
// 카드를 비우면 종료
if(afterSize==0){
break;
}
// 근상이가 카드를 낸다.
beforeSize = GScards.size();
for(int i=0;i<GScards.size();i++){
// 현재 놓인 카드보다 크면 카드를 내기
int drawCard = GScards.get(i);
if(drawCard>currentOnCard){
currentOnCard = drawCard;
GScards.remove(i);
break;
}
}
afterSize = GScards.size();
// 낼 카드가 없는 경우
if(beforeSize==afterSize){
currentOnCard = 0;
}
// 카드를 비우면 종료
if(afterSize==0){
break;
}
}
// 상대가 가진 갯수 출력
System.out.println(GScards.size());
System.out.println(SGcards.size());
}
}