728x90
https://programmers.co.kr/learn/courses/30/lessons/42862?language=java
문제에서 n은 학생의 수를 의미합니다.
lost배열은 체육복을 잃어버린 학생들의 배열을 나타내며 reserve는 여벌의 체육복을 가지고 있는 학생들입니다.
여벌의 체육복은 앞사람 뒷사람에게만 빌려줄수 있고 체육복을 가장 많이 입을수 있는 경우의 수를 구하는 문제입니다.
해당 문제에서 히든테스트케이스 통과가 안되는게 있어 상당히 애먹었습니다만...
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int firstStart = FirstStart(n, lost, reserve);
int lastStart = LastStart(n, lost, reserve);
int answer = firstStart > lastStart ? firstStart : lastStart;
return answer;
}
// 앞에서 부터
private int FirstStart(int n, int[] lost, int[] reserve){
int firstStart = n - (lost.length + reserve.length);
// 자기 자신이 여벌 체육복을 가져왔는데 도난당한 경우 먼저 생각해야함
for(int i = 0; i < lost.length; i++){
for(int j = 0; j < reserve.length; j++){
if(lost[i] == reserve[j]){
lost[i] = -11;
reserve[j] = -99;
}
}
}
for(int i = 0; i < lost.length; i++){
for(int j = 0; j < reserve.length; j++){
if(lost[i] == reserve[j]-1){
lost[i] = -11;
reserve[j] = -99;
}
if(lost[i] == reserve[j]+1){
lost[i] = -11;
reserve[j] = -99;
}
}
}
for(int i = 0; i < lost.length; i++){
if(lost[i] == -11){
firstStart++;
}
}
firstStart += reserve.length;
return firstStart;
}
// 뒤에서 부터
private int LastStart(int n, int[] lost, int[] reserve){
int lastStart = n - (lost.length + reserve.length);
// 자기 자신이 여벌 체육복을 가져왔는데 도난당한 경우 먼저 생각해야함
for(int i = 0; i < lost.length; i++){
for(int j = 0; j < reserve.length; j++){
if(lost[i] == reserve[j]){
lost[i] = -11;
reserve[j] = -99;
}
}
}
for(int i = 0; i < lost.length; i++){
for(int j = 0; j < reserve.length; j++){
if(lost[i] == reserve[j]-1){
lost[i] = -11;
reserve[j] = -99;
}
if(lost[i] == reserve[j]+1){
lost[i] = -11;
reserve[j] = -99;
}
}
}
for(int i = 0; i < lost.length; i++){
if(lost[i] == -11){
lastStart++;
}
}
lastStart += reserve.length;
return lastStart;
}
}
먼저 앞사람한테 빌려줄 경우를 먼저 생각하고 혹시 뒷사람부터 빌려주는 경우에는 경우의 수가 달라질까 싶어 따로 구해봤습니다.
근데 제가 생각하지 못했던게 여벌의 옷이 있더라도 도난당했다면 빌려줄수 없다는 경우입니다.
해당 경우를 먼저 생각했어야하는데 말이죠...!
728x90
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers_Java] K번째 수 (0) | 2021.07.27 |
---|---|
[Programmers_Java] 2016 (0) | 2021.07.26 |
[Programmers_Java] 숫자 문자열과 영단어 - 2021 카카오 채용 연계형 인턴십 (0) | 2021.07.22 |
[Programmers_Java] 로또의 최고 순위와 최저 순위 (0) | 2021.07.21 |
[Programmers_Java] 폰켓몬 (0) | 2021.07.20 |