2890번을 보면 알겠지만, 상근이는 카약 대회를 개최했다. 그런데, 갑자기 엄청난 강풍이 경기장에 불었고, 일부 카약이 부서졌다. 경기는 5분 안에 시작해야 하는 상황이다.
다행히 일부 팀은 혹시 모를 사태에 대비해서 카약을 하나 더 경기장에 들고 왔다. 카약은 매우 무겁고 운반하기 어렵다. 따라서, 자신의 바로 다음이나 전에 경기하는 팀에게만 카약을 빌려주려고 한다. 즉, 팀 4는 여분의 카약을 3이나 5에게만 빌려줄 수 있다. 또, 카약을 하나 더 가져온 팀의 카약이 손상되었다면, 여분의 카약으로 경기에 출전하게되고, 이 카약은 다른 팀에게 빌려줄 수 없다.
카약이 부서진 팀과 하나 더 가져온 팀이 주어진다. 카약을 적절히 빌렸을 때 출발하지 못하는 팀의 최솟값은 몇 팀인지 구하는 프로그램을 작성하시오.
첫째 줄에 팀의 수 N, 카약이 손상된 팀의 수 S, 카약을 하나 더 가져온 팀의 수 R이 주어진다. (2 ≤ N ≤ 10, 1 ≤ S, R ≤ N)
둘째 줄에는 카약이 손상된 팀의 번호가 주어진다. 팀 번호는 중복되지 않는다.
셋째 줄에는 카약을 하나 더 가져온 팀의 번호가 주어진다. 팀 번호는 중복되지 않는다.
첫째 줄에 출발을 할 수 없는 팀의 최솟값을 출력한다.
어느 팀의 보트가 박살났는 지, 어느 팀이 스페어 보트가 남았는 지 파악을 해야한다.
부서진 팀을 순차적으로 정렬을 하고, 부서진 팀의 왼쪽팀에게 우선적으로 빌리고, 왼쪽팀이 없으면 오른쪽 팀에게 빌린다.
왼쪽부터 순차적으로 물어보기 때문에 왼쪽팀꺼를 내가 안쓰면 다른 사람들도 못쓰지만, 오른쪽팀의 보트는 자신의 우측의 우측팀이 사용 가능할 수도 있기 때문이다.
import java.util.*;
import java.io.*;
public class Main{
public static void main(String [] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
final int NUMBER_OF_TEAM = Integer.parseInt(st.nextToken());
final int NUMBER_OF_BREAK = Integer.parseInt(st.nextToken());
final int NUMBER_OF_SPARE = Integer.parseInt(st.nextToken());
int breakTeam[] = new int [NUMBER_OF_BREAK];
boolean breakBoat[] = new boolean [NUMBER_OF_TEAM+1];
boolean spareTeam[] = new boolean [NUMBER_OF_TEAM+1];
st = new StringTokenizer(br.readLine());
for(int i=0;i<NUMBER_OF_BREAK;i++) {
breakTeam[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for(int i=0;i<NUMBER_OF_SPARE;i++) {
spareTeam[Integer.parseInt(st.nextToken())] = true;
}
Arrays.sort(breakTeam);
int answer = 0;
for(int i=0;i<NUMBER_OF_BREAK;i++) {
int temp = breakTeam[i];
if(spareTeam[temp]) {
spareTeam[temp] = false;
}else {
if(temp > 1 && spareTeam[temp - 1]) {
spareTeam[temp-1] = false;
}else {
if(temp != NUMBER_OF_TEAM && spareTeam[temp+1]) {
spareTeam[temp+1] = false;
}else {
answer++;
}
}
}
}
sb.append(answer);
sb.append("\n");
bw.write(sb.toString());
bw.flush();
br.close();
bw.close();
}
}