[프로그래머스] 체육복

홈런볼·2023년 7월 4일
0

프로그래머스

목록 보기
6/36

문제링크

https://school.programmers.co.kr/learn/courses/30/lessons/42862

문제접근(1차)

  1. lost, reserve 배열을 정렬
  2. 여벌이 있는 사람이 잃어버린 사람 일 수도 있으므로 배열을 순회하면서 같은 값이 존재하면 -1로 초기화 해주고 answer 변수를 +1 카운트
  3. 내 앞이나 뒷 사람에게 빌려줘야 하므로 배열을 순회하면서 값이 존재하면 -1로 초기화, answer 변수 +1 카운트
  4. 전체 값에서 lost배열의 수, answer 변수 값 빼서 return

1차시도

public int solution(int n, int[] lost, int[] reserve) {
        int answer=0;
		int big=0;
		int small=0;
        Arrays.sort(lost);
        Arrays.sort(reserve);
        
		for(int i=0;i<lost.length;i++) {
			for(int j=0;j<reserve.length;j++) {
				if(lost[i]==reserve[j]) {
                    answer++;
                    lost[i]=-1;
					reserve[j]=-1;
				}
			}
		}
		for(int i=0;i<lost.length;i++) {
			for(int j=0;j<reserve.length;j++) {
				if(lost[i]==-1){
                    break;
                }
				big=lost[i]+1;
				small=lost[i]-1;
				if(big==reserve[j]||small==reserve[j]) {
					answer++;
					reserve[j]=-1;
					break;
				}
			}
		}
		return n-(lost.length-answer);
    }

정확성 테스트(1차)

후기

코드가 너무 장황한 것 같다. Array.sort 함수의 시간복잡도가 o(logn) 인데, 시간복잡도를 최대한 줄이는 방향으로 리팩토링이 필요할 것 같다

0개의 댓글