첫 시도, 테스트 케이스는 통과가 된다. 정답은 아님
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
int firstN = n - lost.length; //총원 - 도둑맞은 수 = 현재 체육복 있는 사람 수
int secondN = 0; //빌려준 횟수
for(int i = 0 ; lost.length > i; i++){
for(int j = 0; reserve.length> j ; j++){
if( lost[i] == reserve[j] + 1|| lost[i] == reserve[j] -1 ){
lost[i]= -1;
reserve[j]= -1;
secondN++;
}
}
}
answer = firstN + secondN; // 현재 소지수 + 빌려준 횟수
return answer;
}
}
|
cs |
왜 아닐까 고민하던 중 한가지 경우를 생각하지 못했다.
만약 여벌옷을 가진 사람이 도난을 당했을 경우
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
|
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0; //정답
int lend = 0; // 빌려준 수 == 추가 참여 가능 수
int reserveLost= 0;
int lostLength = lost.length ;
int reserveLength = reserve.length;
for(int i = 0 ; lostLength > i; i++){
for(int j = 0; reserveLength> j ; j++){
if( lost[i] == reserve[j]){
lost[i]= -1; //잃어버린 사람에게 주기, 이때는 자신
reserve[j]= -1; //예비분 준 사람 소거, 자신이 다른 사람 못 빌려주게끔
lend++; // 뭐가 되었든 빌려준 것 == 참여 가능 사람
break; //안써도 결과는 나온다. 정답이 안나올 뿐
}
}
}
for(int i = 0 ; lostLength > i; i++){
for(int j = 0; reserveLength> j ; j++){
if( lost[i] == reserve[j] - 1|| lost[i] == reserve[j] + 1){
lost[i]=-1; // lost[i]=-1 대신 그냥 밑의 break 를 써서 처리할 수도 있다.
reserve[j]= -1;
lend++; // 빌려준 것
//break;
}
}
}
answer = n - lost.length + lend;
return answer;
}
}
|
cs |
이렇게 하니 정답이 나왔다.
'코테 > 프로그래머스' 카테고리의 다른 글
상위 n개 레코드 (0) | 2020.12.26 |
---|---|
lv1 완주하지 못한 선수 (0) | 2020.12.24 |
3진법 뒤집기 (0) | 2020.12.06 |
lv1 수박수박수박수박수박수? (0) | 2020.11.15 |
lv1 두 개 뽑아서 더하기 (0) | 2020.11.10 |