(https://www.acmicpc.net/problem/2891)
for(int i=0;i<S;i++) {
dmgKayak[i] = Integer.parseInt(st.nextToken());
}
int start = 0;
st = new StringTokenizer(br.readLine());
for(int i=0;i<R;i++) {
int moreKayak = Integer.parseInt(st.nextToken());
for(int j=start;j<S;j++) {
if(dmgKayak[j] == moreKayak-1 || dmgKayak[j] == moreKayak+1) {
start++;
result--;
break;
}
}
}
Arrays.fill(team, 1);
st = new StringTokenizer(br.readLine());
for(int i=0;i<S;i++) {
int index = Integer.parseInt(st.nextToken())-1;
team[index] = 0;
}
st = new StringTokenizer(br.readLine());
for(int i=0;i<R;i++) {
int index = Integer.parseInt(st.nextToken())-1;
team[index] = 2;
}
for(int i=0;i<N-1;i++) {
if(team[i] == 0 && team[i+1] == 2) {
team[i]++;
team[i+1]--;
}
else if(team[i+1] == 0 && team[i] == 2) {
team[i+1]++;
team[i]--;
}
}
카약을 하나 더 가져온 팀의 카약이 손상되었다면, 여분의 카약으로 경기에 출전하게되고, 이 카약은 다른 팀에게 빌려줄 수 없다.
Of course if some team did bring a reserve and its' kayak was damaged, they will use it themselves and not lend it to anyone.
하나 더 가져온 팀이 부서졌다면, 본인꺼를 쓰지 남에게 빌려주거나 받지 않는다.
즉 R(부서진 팀)에 2번이 있는데 S(가져온 팀)에 2번이 또 있다면 (team2-1)+1 이니까 그대로 1임.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); //팀의 수
int S = Integer.parseInt(st.nextToken()); //손상된 팀의 수
int R = Integer.parseInt(st.nextToken()); //카약 더있는 팀의 수
int[] team = new int[N];
int result = 0;
Arrays.fill(team, 1);
st = new StringTokenizer(br.readLine());
for(int i=0;i<S;i++) {
int index = Integer.parseInt(st.nextToken())-1;
team[index]--;
}
st = new StringTokenizer(br.readLine());
for(int i=0;i<R;i++) {
int index = Integer.parseInt(st.nextToken())-1;
team[index]++;
}
for(int i=0;i<N-1;i++) {
if(team[i] == 0 && team[i+1] == 2) {
team[i]++;
team[i+1]--;
}
else if(team[i+1] == 0 && team[i] == 2) {
team[i+1]++;
team[i]--;
}
}
for(int t:team) {
if(t==0) result++;
}
bw.write(result+"");
bw.flush();
bw.close();
}
}
문제 내용이 이해는데 어렵지는 않았지만, "부서진 팀이 여분이 있을때" 를 생각 못해서 실버5임에도 정답률이 28%대인거 아닐까??
처음에 예제값들은 다 통과했는데 틀렸습니다! 나오길래 당황했지만 문제를 차근히 읽어보니 놓친게 있었다. 프로그래머스 문제를 풀다보니 너무 스토리가 많은, 서사?가 많은 문제들의 앞부분을 자꾸 대충 읽게 됐는데 최대한 꼼꼼하게 읽어봐야겠다... 😥