
🔍문제 분석
✔️ 출처
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;
}
}

❗ 오답노트 / 필요한 지식
- 반복문 조건에서 < 를 써서 테스트케이스 몇개가 틀렸었다... 모든지 제대로 확인하고 시뮬레이션을 돌려봐야한다.
그리고 잘 모르겠으면 출력을 해서 확인해 보자! - 배열의 크기를 할당하면 초기값이 0으로 초기화되는걸 몰라서 쓸데없이 반복문 돌려서 0값을 초기화했다.. 기억하자.
'programmers > Lv 1' 카테고리의 다른 글
프로그래머스Lv 1 기사단원의 무기 (0) | 2024.06.26 |
---|---|
프로그래머스Lv 1 숫자 짝꿍 (0) | 2024.06.26 |
프로그래머스Lv 1 푸드 파이트 대회 (0) | 2024.06.26 |
프로그래머스Lv 1 포켓몬 (0) | 2024.06.26 |
프로그래머스Lv 1 콜라문제 (0) | 2024.06.26 |