알고리즘 공부/프로그래머스

프로그래머스 코딩테스트 연습 - 탐욕법(Greedy) - 체육복

HRuler 2020. 9. 17. 16:41

1. 첫 번째 풀이

	public int solution7(int n, int[] lost, int[] reserve) {
		int answer = 0;
		n = n - lost.length;
		System.out.println("n : " + n);
		ArrayList<Integer> reserve2 = new ArrayList<Integer>();
		for(int i = 0; i < reserve.length; i = i + 1) {
			reserve2.add(reserve[i]);
		}
		for(int i = 0; i < lost.length; i = i + 1) {
			for(int j = 0; j < reserve2.size(); j = j + 1) {
				if((lost[i]-1) == reserve2.get(j)) {
					reserve2.remove(j);
					n += 1;
					break;
				}else if((lost[i] + 1) == reserve2.get(j)) {
					reserve2.remove(j);
					n += 1;
					break;
				}
			}
			System.out.println("n : " + n);
		}
		answer = n;
        return answer;
	}

2. 두 번째 풀이

import java.util.ArrayList;

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        n = n - lost.length;
        System.out.println("n : " + n);
        ArrayList<Integer> lost2 = new ArrayList<Integer>();
        for(int i = 0; i < lost.length; i = i + 1) {
            lost2.add(lost[i]);
        }
        ArrayList<Integer> reserve2 = new ArrayList<Integer>();
        for(int i = 0; i < reserve.length; i = i + 1) {
            reserve2.add(reserve[i]);
        }

        for(int i = 0; i < lost2.size(); i = i + 1) {
            for(int k = 0; k < reserve2.size(); ) {
                if(lost2.get(i) == reserve2.get(k)) {
                    lost2.remove(i);
                    reserve2.remove(k);
                    n = n + 1;
                    i = i - 1;
                    break;
                }
                k = k + 1;
            }
            System.out.println("n : " + n);
        }

        for(int i = 0; i < lost2.size(); i = i + 1) {
            for(int k = 0; k < reserve2.size(); ) {
                if((lost2.get(i) - 1) == reserve2.get(k)) {
                    lost2.remove(i);
                    reserve2.remove(k);
                    n = n + 1;
                    i = i - 1;
                    break;
                }else if((lost2.get(i) + 1) == reserve2.get(k)) {
                    lost2.remove(i);
                    reserve2.remove(k);
                    n = n + 1;
                    i = i - 1;
                    break;
                }
                k = k + 1;
            }
            System.out.println("n : " + n);
        }
        answer = n;
        return answer;
    }
}

3. 다른 사람 풀이

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;
    }
}