알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

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

 

프로그래머스

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

programmers.co.kr


Think🤔

n -> 전체 학생의 수 2명 ~ 30명

            체육복 도난 1명 ~ n명 , 중복 번호 X

reserve -> 여벌의 체육복 1명 ~ n명 , 중복 번호 X

 

앞 뒤로만 체육복을 빌려줄 수 있고, 최대 많은 애들이 수업을 들을 수 있는 경우를 구하는 문제


Solution✍
import java.util.Arrays;
class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = n - lost.length;
        
        for(int i=0; i<lost.length; i++){
            for(int j=0; j<reserve.length; j++){
                if(lost[i] == reserve[j]){
                    answer++;
                    lost[i] = 0;
                    reserve[j] = 0;
                    break;
                }
            }
        }
        
        for(int i=0; i<lost.length; i++){
            for(int j=0; j<reserve.length; j++){
                if(lost[i] == reserve[j]-1 || lost[i] == reserve[j]+1){
                    answer++;
                    reserve[j] = 0;
                    break;
                }
            }
        }
        
        return answer;
    }
}

앞 뒤로 빌려줄 수 있는 사람을 찾고 , ArrayList를 만들지 않고, 0으로 바꿔준다.

 

-> 0에서 -1로 수정

0으로 하면 +1할때, 1이 되면 그 값이 빌려줄 수 있는 값이 돼서, 2가 잃어버린 경우 한가지의 경우가 추가될 수 있음

-> 정렬을 하는 이유?

정렬을 하지 않았을 때 12,13이 실패했음... 흠?

정렬을 하지 않는 경우

4, 6, 8 이 잃어버린 경우 정렬이 되어있으면 3,5,7이 빌려줘서 입을 수 있지만

7, 5, 3 으로 빌려줄 수 있게 되면 큰 값 들이 먼저 빌려서 36을 못빌리므로 테스트 케이스에 통과할 수 없음

 

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

Review🤩

배열 지울 수 없으면 다른값을 대체하는 방법을 사용하자!


 

+ Recent posts