알고리즘

프로그래머스 - 체육복

Heidong 2022. 8. 19. 22:56
반응형

 

 

 

내 풀이

import java.util.Arrays;

public class P_42 {
	
	public static int solution(int n, int[] lost, int[] reserve) {
        int answer = n-lost.length;
        
        Arrays.sort(lost);
        Arrays.sort(reserve);
        
        // 두 배열의 중복 값 처리
        for(int i=0; i<lost.length; i++) {
        	for(int x=0; x<reserve.length; x++) {
        		if(lost[i] == reserve[x]) {
        			lost[i] = -1;
        			reserve[x] = -1;
        			answer++;
        			break;
        		}
        	}
        }
        
        // 체육복 빌려주는 로직
        for(int i=0; i<lost.length; i++) {
        	for(int j=0; j<reserve.length; j++) { 
        		if(reserve[j] == lost[i]-1) {
        			answer++;
        			reserve[j] = -1;
        			lost[i] = -1;
        			break;
        		} else if(reserve[j] == lost[i]+1) {
        			answer++;
        			reserve[j] = -1;
        			lost[i] = -1;
        			break;
        		}
        	}
        }
        
        return answer;
    }

	public static void main(String[] args) {
		// 체육복
		int n = 3; // 전체 학생 수
		int[] lost = {1,2}; // 체육복 잃어버린 학생 번호
		int[] reserve = {2,3}; // 여분의 체육복을 가지고 있는 학생 번호
		
		System.out.println(solution(n, lost, reserve));
	}

}

 

주의해야 할 점 2가지

 

1. lost의 배열과 reserve의 배열의 원소가 겹칠 경우 = 여분의 체육복을 가지고 있는데 본인 체육복을 잃어버린 학생의 경우의 수

 

2. 오름차순 정렬

 

두 배열의 중복 값 처리를 위해서 그냥 중복인 해당 원소를 -1로 바꿔치기 함.

어차피 lost 배열과 reserve 배열의 원소 최소 값 조건은 1이상이기 때문에 계산에 포함 되지 않을 수를 넣어주면 된다.

 

 

 

다른 사람 풀이

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int[] people = new int[n];
        int answer = n;

        for (int l : lost) 
            people[l-1]--;
        for (int r : reserve) 
            people[r-1]++;

        for (int i = 0; i < people.length; i++) {
            if(people[i] == -1) {
                if(i-1>=0 && people[i-1] == 1) {
                    people[i]++;
                    people[i-1]--;
                }else if(i+1< people.length && people[i+1] == 1) {
                    people[i]++;
                    people[i+1]--;
                }else 
                    answer--;
            }
        }
        return answer;
    }
}
반응형