👀 문제
https://programmers.co.kr/learn/courses/30/lessons/42862
👊 첫 번째 도전
1. 설계
- 학생 n을 가지는 배열을 생성, 1로 초기화한다.
- 도난당한 학생은 0의 값을 가지고, 여벌이 있는 학생은 2를 가진다.
- 학생들을 순회하며 도난당한 학생이 있으면 앞 뒤 학생이 여벌이 있을 경우 하나 준다.
- 최종적으로 옷을 가지고 있는 학생 수를 세서 리턴한다.
2. 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**
*
* @author HEESOO
*
*/
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
int[] student=new int[n];
for(int i=0;i<n;i++){
student[i]=1;
}
for(int l:lost){
student[l-1]--;
}
for(int r:reserve){
student[r-1]++;
}
for(int i=0;i<n;i++){
if(student[i]==0){
if(i-1>=0&&student[i-1]==2){
student[i]++;
student[i-1]--;
}
else if(i+1<n&&student[i+1]==2){
student[i]++;
student[i+1]--;
}
}
}
for(int i=0;i<n;i++){
if(student[i]==1||student[i]==2){
answer++;
}
}
return answer;
}
}
3. 코드 설명
- 학생 수(n)만큼의 크기를 가지는 배열을 생성, 1로 초기화한다. 옷이 없으면 0, 여벌이 있으면 2로 저장한다.
- 배열을 순회하면서 현재 학생이 옷이 없을 경우, 앞뒤 학생이 여벌을 가지고 있는지 확인한다. 이때 인덱스가 배열의 범위를 벗어나지 않도록 체크한다. 옷이 있다면 준다.
- 순회가 끝나면 배열을 다시 순회하며 옷이 있는 학생(여벌 포함)의 수를 세서 리턴한다.
4. 결과
🤟 성공 🤟
👏 해결 완료!
쉬운 문제였지만 효율적으로 푼 것 같지는 않다.