6주차 화요일 알고리즘
체육복
function solution(n, lost, reserve) {
let result=[]
const max=(lost.length,reserve.length)
for(let i=0;i<max;i++){
result+=lost.filter((el)=> el=== reserve[i]+1 ||el=== reserve[i]-1)
}
if(lost.length > result.length){
return n+result.length-lost.length
}else{return n-lost.length+reserve.length > n ? n : n-lost.length+reserve.length}
}
멘토님풀이
function solution(n, lost, reserve) {
const losted=[...lost]//lost가 필터되기 이전의 테이터를 저장한다.
lost =lost.filter(student=>!reserve.includes(student)).sort((a,b)=>a-b)
reserve=reserve.filter(student=> !losted.includes(student)).sort((a,b)=>a-b)
let answer = n-lost.length;
for(let i=0;i<lost.length;i++){
// 내 앞번호의 학생이 여벌체육복을 가지고 있는지를 검사
if(reserve.includes(lost[i]-1)){
reserve.splice(reserve.indexOf(lost[i]-1),1)
answer++
// 내 뒷번호의 학생이 여벌 체육복을 가지고 있는지를 검사
}else if(reserve.includes(lost[i]+1)){
reserve.splice(reserve.indexOf(lost[i]+1),1)
answer++
}
}
return answer
}
solution( 5, [2, 4], [3])
앞뒤 학생만 비교하는게아니라
제한사항이었던 중복데이터 처리와
번호릐 뒤죽박죽일 가능성을 염두해야했돠...
다른방법
function solution(n, lost, reserve) {
const losted=[...lost]//lost가 필터되기 이전의 테이터를 저장한다.
lost =lost.filter(student=>!reserve.includes(student)).sort((a,b)=>a-b)
reserve=reserve.filter(student=> !losted.includes(student)).sort((a,b)=>a-b)
let answer = n-lost.length;
return lost.reduce((acc,cur)=>{
// 앞에있는 학색이 여벌 에츅복을 가지고 있는지
const prev=reserve.indexOf(cur-1)
// 뒤에있는 학생이 여벌 체육복을 가지고 있는지
const next=reserve.indexOf(cur+1)
// 앞에있는학생이 여벌체육복을 가지고 있는 경우
if(prev!==-1){
reserve.splice(prev,1)
acc++
}else if(next !== -1){
// 뒤에있는학생이 여벌체육복을 가지고 있는 경우
reserve.splice(next,1)
acc++
}
return acc;
},answer)
}
Author And Source
이 문제에 관하여(6주차 화요일 알고리즘), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@iamm71kr/6주차-화요일-알고리즘저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)