본문 바로가기
코딩테스트 연습

체육복 서로 빌려줘 수업받을 수 있는 인원 확인하는 코드

by 고유빙글 2021. 8. 20.
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문을 두번 쓸 필요가 없었던거 같다. 바로 인접한 수만 비교하면 되기때문에 ㅠㅠ