체육복

Heeeoh·2023년 3월 17일
0

프로그래머스

목록 보기
10/24
post-thumbnail

🔍문제 분석

✔️ 출처

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

📖 문제


탐욕법에 대한 지식은 없으나 최대의 이익?을 얻어야 하는것 같다. 배열을 사용하여 체육복이 있는 학생은 0, 없는 학생은 -1, 여분이 있는 학생은 1 값을 준다. 여분을 잃어버린 학생도 고려해야한다.
2개에서 1개가 된 것이니 초기값 0 += 1(여분) -> -= 1(잃어버림) => 0(본인몫의 체육복 소지)

🔅 문제풀이

1:1대응을 위해 n+2로 배열크기를 선언한다.


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

        for(int a : student) {a = 0;}
        for(int i = 1; i <= lost.length; i++) {student[lost[i-1]] -= 1;}
        for(int i = 1; i <= reserve.length; i++) {student[reserve[i-1]] += 1;}
        
        for(int i = 1; i < student.length; i++) {
            
            if(student[i] == 1){
                if(student[i-1] == -1){
                    student[i-1] = 0;
                    student[i] = 0;
                
                }else if(student[i+1] == -1){
                    student[i+1] = 0;
                    student[i] = 0;
                }
            }
        }
        
        for(int cnt : student){
            answer -= cnt == -1 ? 1 : 0;
        }
        
        return answer;
    }
}
    

❗ 오답노트 / 필요한 지식

  1. 반복문 조건에서 < 를 써서 테스트케이스 몇개가 틀렸었다... 모든지 제대로 확인하고 시뮬레이션을 돌려봐야한다.
    그리고 잘 모르겠으면 출력을 해서 확인해 보자!
  2. 배열의 크기를 할당하면 초기값이 0으로 초기화되는걸 몰라서 쓸데없이 반복문 돌려서 0값을 초기화했다.. 기억하자.
profile
열심히 살자

0개의 댓글