Problem
총 학생의 수, 체육복을 도난 당한 학생, 체육복을 더 가져온 학생 리스트가 주어졌을 때
체육 수업에 참여할 수 있는 학생의 수를 구하는 문제입니다.
체육복은 인접한 학생에게밖에 빌려주지 못하며 무조건 1벌의 여벌밖에 없습니다.
여벌의 체육복을 가져온 사람도 체육복을 하나 도난당할 수 있습니다.
Solution
학생 수만큼 clothes
배열을 선언하여 상태를 정의합니다.
상태 | 뜻 |
---|---|
-1 | 도난당한 학생 |
0 | 체육복을 갖고 있는 학생 |
1 | 여벌이 존재하는 학생 |
lost
배열에 있으면 -1 하고 reserve
배열에 있으면 +1 합니다.
만약 여벌의 체육복이 있는데 도난당한 학생은 0 으로 본인의 체육복만 소지한 상태가 됩니다.
그 다음에 clothes
배열을 한번 돌면서 -1 인 index
의 앞 뒤를 확인하면서 1 이 있다면 0 으로 만들어주면 됩니다.
최종 결과는 배열에서 -1 값의 갯수를 리턴해줍니다.
Java Code
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int[] clothes = new int[n+2];
int count = 0;
for (int i : lost) clothes[i]--;
for (int i : reserve) clothes[i]++;
for (int i = 1; i< n+1; i++) {
if (clothes[i] == -1) {
if (clothes[i-1] == 1) {
clothes[i-1]--;
clothes[i]++;
} else if (clothes[i+1] == 1) {
clothes[i+1]--;
clothes[i]++;
}
}
if (clothes[i] != -1) {
count++;
}
}
return count;
}
}
'알고리즘 문제 > Programmers' 카테고리의 다른 글
[프로그래머스] 2019 카카오 겨울인턴. 튜플 (Java) (0) | 2020.05.12 |
---|---|
[프로그래머스] 2019 카카오 겨울인턴. 크레인 인형뽑기 게임 (Java) (0) | 2020.05.12 |
[프로그래머스] 위장 (Java) (0) | 2019.11.26 |
[프로그래머스] 전화번호 목록 (Java) (0) | 2019.11.26 |
[프로그래머스] 완주하지 못한 선수 (Java) (0) | 2019.11.26 |