08. 프로그래머스(1단계) - 체육복
📌 문제의 조건
- 총 학생 수, 체육복 없는 사람 배열, 여벌 옷 있는 사람 배열 을 인자로 받음
- 체육복 없는 사람은 번호 +1 하거나 -1 한 사람의 체육복만 빌릴 수 있음.
제한사항 🤔
- 전체 학생의 수는 2명 이상 30명 이하입니다.
- 체육복을 도난당한 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
- 여벌의 체육복을 가져온 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
- 여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있습니다.
- 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 * 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.
📌 풀이
의사 코드 👨💻
- lost를 초기값 n으로 리듀스한다.
- 조건문을 달아서 lost의 각 인자에 +1 또는 -1한 값이 reserve에 있으면
- 그냥 reserve에서 해당 숫자를 빼고 acc반환
- 없으면 acc 에서 -1
첫 풀이 👨💻
function solution(n, lost, reserve) {
lost = lost.sort((a,b)=>a-b);
reserve = reserve.sort((a,b)=>a-b);
lost = lost.filter((e)=>{
if(reserve.includes(e)){
reserve.splice(reserve.indexOf(e),1);
return false;
}
return true;
} )
return lost.reduce((acc, cur)=>{
if(reserve.includes(cur-1)){
reserve.splice(reserve.indexOf(cur-1),1);
return acc;
} else if(reserve.includes(cur+1)){
reserve.splice(reserve.indexOf(cur+1),1)
return acc;
} else {
return acc - 1
}
}, n)
}
📌 리뷰
의사 코드 👨💻
- lost를 초기값 n으로 리듀스한다.
- 조건문을 달아서 lost의 각 인자에 +1 또는 -1한 값이 reserve에 있으면
- 그냥 reserve에서 해당 숫자를 빼고 acc반환
- 없으면 acc 에서 -1
첫 풀이 👨💻
function solution(n, lost, reserve) {
lost = lost.sort((a,b)=>a-b);
reserve = reserve.sort((a,b)=>a-b);
lost = lost.filter((e)=>{
if(reserve.includes(e)){
reserve.splice(reserve.indexOf(e),1);
return false;
}
return true;
} )
return lost.reduce((acc, cur)=>{
if(reserve.includes(cur-1)){
reserve.splice(reserve.indexOf(cur-1),1);
return acc;
} else if(reserve.includes(cur+1)){
reserve.splice(reserve.indexOf(cur+1),1)
return acc;
} else {
return acc - 1
}
}, n)
}
📌 리뷰
리턴문 작성은 5분도 안걸린거 같은데 여러 엣지 케이스들을 고려하는 것에서 시간이 좀 끌렸다.
인덱스가 차례대로 온다고 가정하고 인덱스를 사용한거라 정렬을 시켜줬고,
마지막 제한 사항인 여벌 체육복을 가지고 있는 학생이 체육복을 잃어버린 경우를 필터링 해줬다.
포루프 돌리려다가 필터를 쓸 수 있을 것 같아 사용해봤는데 나쁘지 않았던 것 같다.
📌 문제 출처
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges#
Author And Source
이 문제에 관하여(08. 프로그래머스(1단계) - 체육복), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@planethoon/체육복저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)