import java.util.Arrays;
public class sports {
public static void main(String[] args) {
int n = 10;
int[] lost = {5,4,3,2,1};
int[] reserve = {3,1,2,5,4};
int answer = solution(n, lost, reserve);
System.out.println("answer : "+answer);
}
private static int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
Arrays.sort(lost);
Arrays.sort(reserve);
for (int i = 0; i < reserve.length; i++) {
for (int j = 0; j < lost.length; j++) {
if(reserve[i]==lost[j]) {
reserve[i] = -10;
lost[j] = -40;
}
}
}
for (int i = 0; i < lost.length; i++) {
for (int j = 0; j < reserve.length; j++) {
if(lost[i]-reserve[j]<2 && lost[i]-reserve[j]>-2) {
lost[i] = -20;
reserve[j] = -30;
}
}
}
for (int i = 0; i < lost.length; i++) {
n -= (lost[i]>0)? 1:0;
}
answer = n;
return answer;
}
}
번호가 인접해야 빌려줄 수 있다는 조건이 있다.
역시 계속해서 고질적으로 시간복잡도에대해 줄이기가 어렵다.
훈련을 좀 더 해보아야겠다.
다른 사람의 풀이를 보니 배열을 이용해서 학생별로 체크하는 방법이 있었다.
너무 대단하당..
그리고 생각해보니 for문을 두번 쓸 필요가 없었던거 같다. 바로 인접한 수만 비교하면 되기때문에 ㅠㅠ
'코딩테스트 연습' 카테고리의 다른 글
채점하기.. 본인이 채점한 점수가 최고값,최소값일 경우는 제외하고 (0) | 2021.08.20 |
---|---|
폰켓몬을 받을때 최대 몇 종류를 가져갈 수 있을까? (0) | 2021.08.20 |
일정한 형식의 답안을 제출하는 학생들중 최대 정답자명단 뽑기 (0) | 2021.08.20 |
배열의 일부를 정렬하고 정렬한 수 중에 k 번째 수를 구하라. (0) | 2021.08.20 |
배열내 세개의 숫자의 합이 소수인 개수 구하기. (0) | 2021.08.20 |