JAVA

[Java] 프로그래머스 Lv.1 체육복 (그리디 알고리즘)

merryna 2022. 8. 1. 21:03
반응형

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

테스트케이스 13번

: 배열 sort를 해주어야 한다.

 

이유

n=5 lost=[4,2] reserve=[3,5] 
return : 5
출력 값 : 4

 

> 정렬하지 않으면 3번이 4번한테 빌려줘서 2번은 못받기 때문

 

 

import java.util.*;
class Solution {
    public 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 j=0; j<reserve.length; j++){
                if(lost[i] == reserve[j]){
                    reserve[j] = lost[i] = -1;
                    answer++;
                    break;
                } 
            }
        }
        
        for(int i=0; i<lost.length; i++){
            for(int j=0; j<reserve.length; j++){
                if((lost[i]+1) == reserve[j] || (lost[i]-1) == reserve[j]){
                    reserve[j] = -1;
                    answer++;
                    break;
                }
            }
        }
        
        return answer;
    }
}

(반복문이 많아서 리팩토링이 필요할 것 같다.)

for(int loster : lost){
            for(int j=0; j<reserve.length; j++){
                if(loster == reserve[j]+1 || loster == reserve[j]-1){
                    reserve[j] = -1;
                    answer++;
                    break;
                }
            }
        }

무릎을 탁 친 다른 분들의 풀이

이중포문을 없애줄 수 있다.

 

잃어버린 사람 -1 

잃어버렸지만  여분이 있는 사람 0 

빌려줄 수 있는 사람 1

public int solution(int n, int[] lost, int[] reserve) {
        int[] people = new int[n];
        
        for (int l : lost) 
            people[l-1]--;
        for (int r : reserve) 
            people[r-1]++;
 }

 

반응형