반응형
프로그래머스 LV1 > 탐욕법(Greedy) > 체육복
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42862#
[문제해결]
1. 여벌의 체육복을 가져온사람꺼를 훔쳐갔을수도 있다. 두 배열을 비교해 중복을 제거해준다. splice()를 써주되, 원본이 바뀐다는 사실에 유념한다.
2. 두 배열을 정렬해준다.
3. 체육복을 빌려주면 각 array에서 제거한다(filter)
4. 최종적으로 총 인원에서 잃어버린 체육복의 갯수 lost.length를 빼준다.
실패한코드
function solution(n, lost, reserve) {
reserve.forEach((el,i) => {
if(lost.indexOf(el)!==-1){
lost.splice(lost.indexOf(el),1);
reserve.splice(i,1);
}
})
lost.sort((a, b) => a - b);
reserve.sort((a, b) => a - b);
let count = n - lost.length;
for(let i=0; i<reserve.length; i++){
let left = reserve[i] -1;
let right = reserve[i] + 1;
for(let j=0; j<lost.length; j++){
if(lost[j] == left){
count++
}
continue;
if(lost[j] == right){
count++
}
}
}
return count;
}
테케는 다 통과했는데 뭐가 문제지 했더니,
1. continue가 if문 바깥에 있어서 아래 if문은 무조건 안타고있었다.
2.중복을 걸러주는것도 reserve를 splice하면서 index가 한칸씩 짧아지는데 원본을 바꾸고있다는걸 인식을 못하고 있었다.
수정한코드
function solution(n, lost, reserve) {
let lostItem = [...lost]
let reserveItem = [...reserve]
for(let i = 0; i < lostItem.length; i++) {
if(reserveItem.includes(lostItem[i])) {
let duplicateIdx = reserveItem.indexOf(lostItem[i])
lostItem.splice(i, 1);
reserveItem.splice(duplicateIdx, 1);
i--
}
}
console.log('중복제거후 reserve',reserveItem)
console.log('중복제거후 lost',lostItem)
lostItem.sort((a, b) => a - b);
reserveItem.sort((a, b) => a - b);
for(let i=0; i<reserveItem.length; i++){
for(let j=0; j<lostItem.length; j++){
let left = reserveItem[i] - 1;
let right = reserveItem[i] + 1;
if(lostItem[j] == left){
lostItem = lostItem.filter(el => el !== lostItem[j])
reserveItem = reserveItem.filter(el => el !== reserveItem[i])
j = j-1;
i = i-1;
continue;
}
if(lostItem[j] == right){
lostItem = lostItem.filter(el => el !== lostItem[j])
reserveItem = reserveItem.filter(el => el !== reserveItem[i])
j = j-1;
i = i-1;
}
}
}
let count = n - lostItem.length; //이 시점에서 체육복이 있는사람 카운팅
return count;
}
좀더 수정할수있을듯한데..
나중에 다시 풀어봐야겠다.
반응형
'[IT] 프로덕트 개발 > Coding Test - 코딩테스트' 카테고리의 다른 글
[LV1] 숫자 짝꿍 (0) | 2022.11.24 |
---|---|
[LV0] 숨어있는 숫자의 덧셈(2) (0) | 2022.11.23 |
[LV1] 문자열 내 마음대로 정렬하기 (0) | 2022.11.21 |
[LV1] 기사단원의 무기 (0) | 2022.11.21 |
[LV1] 옹알이2 / while() (0) | 2022.11.15 |