[프로그래머스] 체육복 문제 풀이(탐욕법 Greedy Lv.1) - C++
2021. 12. 20. 05:00ㆍ네카라쿠배 취준반 - 프로그래머스 문제 풀이
0. 자세한 설명은 YouTube 영상으로
1-1. Set을 활용한 Solution
import java.util.*;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
// 1. Set을 만든다
HashSet<Integer> resList = new HashSet<>();
HashSet<Integer> losList = new HashSet<>();
for (int i : reserve)
resList.add(i);
for (int i : lost) {
if (resList.contains(i))
resList.remove(i);
else
losList.add(i);
}
// 2. 여분을 기준으로 앞뒤를 확인하여 체육복을 빌려준다.
for (int i : resList) {
if (losList.contains(i - 1))
losList.remove(i - 1);
else if (losList.contains(i + 1))
losList.remove(i + 1);
}
// 3. 최대한 나눠준 뒤에 lost에 남아있는 학생들은 체육복이 없는 학생들이다.
return n - losList.size();
}
public static void main(String[] args) {
Solution sol = new Solution();
int[] lost = { 2, 4 };
int[] reserve = { 1, 3, 5 };
System.out.print(sol.solution(5, lost, reserve));
}
}
1-2. 배열을 활용한 Solution
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
// 1. student 배열 생성
int[] student = new int[n + 2];
int answer = 0;
// 2. reserve / lost 정보 반영
for (int l : lost)
student[l]--;
for (int r : reserve)
student[r]++;
// 3. 여분을 기준으로 앞뒤를 확인하여 체육복을 빌려준다.
for (int i = 1; i <= n; i++) {
if (student[i] == 1) {
if (student[i - 1] == -1) {
student[i]--;
student[i - 1]++;
} else if (student[i + 1] == -1) {
student[i]--;
student[i + 1]++;
}
}
}
// 4. 체육복을 갖고 있는 학생 수를 계산한다.
for (int i = 1; i <= n; i++)
if (student[i] > -1)
answer++;
return answer;
}
public static void main(String[] args) {
Solution sol = new Solution();
int[] lost = { 2, 4 };
int[] reserve = { 1, 3, 5 };
System.out.print(sol.solution(5, lost, reserve));
}
}
- YouTube 영상에 자세한 내용을 정리했으니 참고하세요.
'네카라쿠배 취준반 - 프로그래머스 문제 풀이' 카테고리의 다른 글
[2021 카카오 코딩테스트] 메뉴 리뉴얼 - 파이썬 (0) | 2021.12.27 |
---|---|
[2021 카카오 코딩테스트] 메뉴 리뉴얼 - 자바 java (0) | 2021.12.22 |
[프로그래머스] 체육복 문제 풀이(탐욕법 Greedy Lv.1) - 파이썬 python (0) | 2021.12.15 |
[프로그래머스] 프린터 문제 풀이(스택/큐 Lv.2) - 파이썬 python (0) | 2021.12.13 |
[프로그래머스] 체육복 문제 풀이(탐욕법 Greedy Lv.1) - java 자바 (0) | 2021.12.08 |