‘프로그래머스 코딩테스트 고득점 Kit’ 문제 입니다. 😀
문제 👉 <코딩테스트 연습 - 체육복 | 프로그래머스>
1. 문제
체육복을 잃어버린 학생은 앞 뒤 번호 학생들 중 여벌의 체육이 있는 학새에게 체육복을 빌릴 수 있다.
여벌의 체육이 있는 학생이 도난을 당한 경우는 체육복 하나만 도난당한 것이며, 남은 체육복을 다른 학생에게 빌려줄 수 없다.
2. 풀이
Greedy
를 이용한 문제 풀이
- 전체 학생의 체육복 개수를 하나의 배열에 저장한다.
- 기본 체육복의 개수를 배열의 초기값이 0으로 가정
- 여분의 체육복이 있을 경우 : +1
- 체육을 도난당한 경우 : -1
- 체육복의 개수가 -1인 학생의 경우 왼쪽/오른쪽 학생을 확인하고 빌릴 수 있으면 빌린다.
3. 코드
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = n;
int[] students = new int[n];
for (int i : reserve) { students[i-1]++; }
for (int i : lost) { students[i-1]--; }
for (int i=0; i<n; i++) {
if (students[i] < 0) {
// 왼쪽 학생
if (i != 0 && students[i-1] > 0) {
students[i]++;
students[i-1]--;
}
// 오른쪽 학생
else if (i != n-1 && students[i+1] > 0) {
students[i]++;
students[i+1]--;
}
// 빌릴지 못할 경우
else { answer--; }
}
}
return answer;
}
}
References
🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 큰 수 만들기 [JAVA(자바)] (0) | 2021.11.25 |
---|---|
[프로그래머스] 조이스틱 [JAVA(자바)] (0) | 2021.11.25 |
[프로그래머스] 카펫 [JAVA(자바)] (0) | 2021.11.25 |
댓글