TIL 20221128 - 146번

hoin_lee·2022년 11월 28일
0

TIL

목록 보기
111/236

오늘 공부

알고리즘 문제 풀기(프로그래머스)
https://github.com/hoinlee-moi/Algorithm

JS기본문법 다시 공부
https://github.com/hoinlee-moi/ModernJS

React 강의 듣기
https://github.com/hoinlee-moi/React_prac


왜 이렇게 몸이 낫질 않는 건지 어디가 아픈건가 싶다.
영양제랑 다이어트, 운동 <= 시간이 없지만 최대한 챙겨서 몸 컨디션을 챙길 수 있도록 하자.
주변에 괜찮다 괜찮다 하는데 잠을 자도자도 끝이 없고 솔직히 한번 아무 생각없이 입원해서 링거 맞고 하루종일 자고 싶은 마음이 들기도 한다.
하지만 스스로 한 약속을 지키기 위해 하루 30분 이상씩은 꼭 코딩 공부를 진행하고 있다.

오늘 알고리즘

체육복(탐욕법)

function solution(n, lost, reserve) {
    const uniformArr = new Array(n).fill(1);
    const uniform = uniformArr.map((v,i,ar)=>{
        if(lost.includes(i+1))  --v
        if(reserve.includes(i+1))  ++v
        return v
    });
    for(let i=0; i<=uniform.length-1; i++) {
        if(uniform[i]===0) {
            if(uniform[i-1]>1) {
                uniform[i-1]--
                uniform[i]++
            }else if(uniform[i+1]>1){
                uniform[i+1]--
                uniform[i]++
            }
        }
    }
    return uniform.filter(v=>v>0).length 
}
  • 먼저 제한사항으로 학생수가 30명 이하로 n만큼의 학생을 배열로 만들고 모든 학생이 체육복을 가지고 있는다고 가정하여 1이란 숫자를 넣어준다.
  • 그리고 배열을 map으로 돌려 도난당한 학생일 때와 여벌을 가지고 있는 학생일 때를 비교하여 각각 체육복을 ++, --시킨다.
  • 이때 도난과 여벌 학생이 같으면 동시에 작업될 수 있도록 한다.
  • 도난과 여벌 학생이 구별된 uniform 배열이 완성되면 반복문 (가장 속도가 빠른 for문을 이용했다)을 사용하여 학생이 가지고 있는 체육복이 0개라면 앞쪽 번호에 2벌을 가지고 있는지 확인하고 있다면 빌린다.
  • 앞쪽 번호에 없다면 뒷 번호를 체크 하여 빌린다.
  • 반복문을 통해 앞번호부터 차근차근 진행하여 체육복이 0개인 사람에게 빌려줄 수 있는만큼 모두 빌려줬다면 uniform에서 0보단 큰 값(체육복이 있는사람)의 수를 return한다.

다른 사람의 풀이도 확인하였는데 풀이가 비슷하고 별 다를 게 없어서 나름 괜찮은 풀이가 아니었을까 싶다!

profile
https://mo-i-programmers.tistory.com/

0개의 댓글