⚡문제정보
모든 학생들은 체육복을 가지고 있습니다.
근데 체육복을 도둑맞은 사람이 있고
여벌체육복이 한벌 더 있는 사람도 있어요
빌려주는 걸 통해서 가장 많은 학생이 체육복을 입을 수 있게 해주면 되는데
체육복은 앞뒤로만 빌려줄 수 있다고합니다.
또 여벌을 갖고있는 애도 도둑을 맞을 수 있어요
근데 딱 한벌만 훔쳐가는 거 보면 도둑도 최소한의 양심은 있네요
🙄입출력 예
🔍접근방법
여벌을 가지고 있는 녀석과
도둑 맞은 녀석들을 정리해주는게 중요하다고 생각했습니다.
앞뒤로만 빌려줄 수 있으니 체육복이 없는 녀석 근처에 체육복이 2벌인 녀석이 있으면
빌려줄수 있도록 코드를 짰습니다.
🔍나의 풀이
function solution(n, lost, reserve) {
let arr = new Array(n).fill(1)
for(i=0 ; i < Math.max(lost.length,reserve.length) ; i++ ) {
arr[ lost[i] -1 ]--
arr[ reserve[i] -1 ]++
}
for(i=0 ; i < arr.length ; i++) {
if(arr[i] == 2 && arr[i-1] ==0) {
arr[i]--;
arr[i-1]++
}
else if(arr[i] == 2 && arr[i+1] == 0 ) {
arr[i]--;
arr[i+1]++;
}
}
return arr.filter(ele => ele!=0).length
}
풀이 방법은 아래에 서술합니다.
function solution(n, lost, reserve) {
let arr = new Array(n).fill(1)
// 1로 채워진 배열을 만들어줍니다. 모든 학생은 체육복을 갖고있었으니까요
for(i=0 ; i < Math.max(lost.length,reserve.length) ; i++ ) {
arr[ lost[i] -1 ]--
// 체육복 잃어버린 놈들은 0으로 만들어줍니다.
arr[ reserve[i] -1 ]++
// 체육복 여벌있는 놈들은 2로 만들어줍니다.
}
for(i=0 ; i < arr.length ; i++) {
if(arr[i] == 2 && arr[i-1] ==0) {
arr[i]--;
arr[i-1]++
//만약 i가 여벌이 있고 i-1이 체육복이 없다면 빌려줍니다.
}
else if(arr[i] == 2 && arr[i+1] == 0 ) {
arr[i]--;
arr[i+1]++;
//만약 i가 여벌이 있고 i+1이 체육복이 없다면 빌려줍니다.
}
//-1인 애들부터 빌려주지 않으면 오류가발생합니다.
}
return arr.filter(ele => ele!=0).length
//체육복을 갖고있는애들로만 배열을 재구성해주고 길이를 재줍니다.
}
반응형
'programmers' 카테고리의 다른 글
[Programmers Level 1] 성격 유형 검사하기 Javascript (0) | 2022.12.20 |
---|---|
[Programmers Level 0] 가장 가까운 같은 글자 Javascript (0) | 2022.12.17 |
[Programmers Level 2] 귤 고르기 Javascript (0) | 2022.12.15 |
[Programmers Level 0] 다항식 구하기 Javascript (0) | 2022.12.15 |
[Programmers Level 1] 신고 결과 받기 Javascript (0) | 2022.12.14 |