자바스크립트 코딩테스트
프로그래머스 Level 1 - 체육복 (Javascript)
준벨롭
2023. 11. 17. 15:01
문제
내 답안 (테스트 케이스에서 틀림)
function solution(n, lost, reserve) {
var answer = 0;
let rL = lost.filter((l)=>!reserve.includes(l));
let rR = reserve.filter((r)=>!lost.includes(r));
let stu = n - rL.length;
lost.sort();
for(let i = 0; i < rL.length; i++){
for(let j = 0; j < rR.length; j++){
if(rL[i]+1 == rR[j]){
stu++;
rR.splice(rR.indexOf(rR[j]),1,"");
rL.splice(rL.indexOf(rL[i]),1,"");
}
else if(rL[i]-1 == rR[j]){
stu++;
rR.splice(rR.indexOf(rR[j]),1,"");
rL.splice(rL.indexOf(rL[i]),1,"");
}
}
}
return n-rL.length+rL.filter(a=>a=="").length;
참고답안
function solution(n, lost, reserve) {
let answer = 0;
// n의 갯수만큼 1이 들어있는 hasUniform 배열을 만든다.
let hasUniform = new Array(n).fill(1);
// hasUniform 배열에서 체육복을 잃어버린 학생의 배열에 1을 빼줘서 0으로 만든다.
for(let i = 0; i < lost.length; i++){
hasUniform[lost[i]-1]--;
}
// hasUniform 배열에서 체육복 여분이 있는 학생의 배열에 1을 더해줘서 2를 만든다.
for(let i = 0; i < reserve.length; i++){
hasUniform[reserve[i]-1]++;
}
// hasUniform의 i에 있는 값이 0이고,
// hasUniform의 i-1에 있는 값이 2면, i-1에 1을 빼준다. (체육복을 빌려줌)
// hasUniform의 i에 있는 값인 0에 1을 더해준다. (체육복을 빌림)
// else if에서는 i+1에 있는 값이 2면 i+1에서 1을 빼준다.
// i값에 1을 더해준다.
for(let i = 0; i < hasUniform.length; i++){
if(hasUniform[i]==0){
if(hasUniform[i-1]==2){
hasUniform[i-1]--;
hasUniform[i]++;
} else if(hasUniform[i+1]==2){
hasUniform[i+1]--;
hasUniform[i]++;
}
}
// hasUniform의 i값이 1 이상이면 answer를 더해준다.
if(hasUniform[i] >= 1){
answer++;
}
}
return answer;
}
후기
splice를 사용하면 반복문이 제대로 동작하지 않은 경우가 있다는 것을 알았다.
다양한 메서드, 객체를 이용한 풀이들이 점점 많아지고 있다.
for문만을 이용해서 푸는것보단 다른 방법을 이용해서 풀어봐야할듯..
728x90