Problem Solving/프로그래머스

[프로그래머스/JavaScript] 체육복

세고래 2022. 10. 5. 15:20

https://school.programmers.co.kr/learn/courses/30/lessons/42862

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


1) 풀이

오랜만에 풀어보는 그리디 문제!

이상하게 BFS 이런 것보다도 그리디 같은 문제를 좀 어려워하는 편이라서

한줄 한줄 잘 읽어가면서 차분히 풀려고 노력했다

 

이 문제는 진짜 특히, 이상했는데.. 레벨 1이고 분명히 c++로 풀었었는데

하루종일 풀었는데도 도저히 못 풀어서.. 이거 때문에 밤을 꼴딱 새고 잤다..

(이거만 풀고 잘라고 했는데 실패함 😥)

 

오늘도 헤매기 싫고 할 것도 쌓여있어서 검색 한 번 해봤더니..

ㄹㅇ 어이없는 이유였다.. 한줄 적고 1분도 안 돼서 바로 해결.. 

다른 로직은 다 맞았던 거고 lost 배열을 정렬이 되어있지 않은 경우때문에 문제가 생기는 거였다

 

문제의 테케 13, 14..

테스트케이스 13,14 

lost 배열이 정렬이 안되어있을 경우를 생각

[프로그래머스] 체육복 (그리디) / javascript   이글에서 예시를 그대로 들고 와보았다

이 분도 체육복 문제 질문목록을 뒤져서 해당 이유를 찾아내셨다고 한다.. 고생하셨슴니다..😂

lost 배열이 정렬되어있지 않을때에 내가 짜놓은 로직이 작동 안 할 수 있다

이유가 뭘까? 예시를 들어보자

n=5 lost=[4,2] reserve=[3,5] 이면 바른 return 값은 5인데
정렬하지 않으면 순서대로 배열을 순회하게되어서 4번학생은 3번에게 빌려주게 되고,
2번학생은 결국 여분 체육복을 받지 못해서 체육수업에 참여할 수 없기 때문에 총 가능한 학생수가 4명이 된다.

 

정말.. 정말 허무하고.. 여러 경우를 다시 한 번 생각해보아야겠다고 다시금 깨닫게 된 문제..

그래도 늘 써보고자 했던 map 함수도 써본 문제라 하나 배웠다 생각하고 넘어간다

레벨 1은 좀 스무스하게 넘어가보자고.. 😂

 

2) 최종 소스코드
function solution(n, lost, reserve) {
    let answer = 0;    
    reserve=reserve.map((value)=>
            lost.includes(value)? //여분의 체육복을 가지고 있는데 분실된 경우는 lost 배열과  reserve에서 모두 제외
            lost.splice(lost.indexOf(value),1):
            value
            );
        lost.sort(); //정렬
        for(let i=0;i<lost.length;i++){
        if(reserve.includes(lost[i]-1)){ 
           	answer++; //answer 변수를 count 변수처럼 사용
            reserve.splice(reserve.indexOf(lost[i]-1),1);
            
        }else if(reserve.includes(lost[i]+1)){
            answer++;
            reserve.splice(reserve.indexOf(lost[i]+1),1);
        }
    }
    answer=n-(lost.length-answer);
    return answer;
}
3) 참고자료

https://velog.io/@euneun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%B2%B4%EC%9C%A1%EB%B3%B5-%EA%B7%B8%EB%A6%AC%EB%94%94-javascript

 

[프로그래머스] 체육복 (그리디) / javascript

✅ 프로그래머스 체육복의 히든 테스트케이스 기록 🔖

velog.io

https://bbaktaeho-95.tistory.com/40

 

[Javascript/Array] find, findIndex, indexOf (배열 검색)

📚 find, findIndex, indexOf 자바스크립트 Array.prototype 배열에서 원하는 값 또는 식별자를 찾아내는 메서드 배열을 순차 반복 find 는 인자로 받은 판별 함수를 만족하는 첫 번째 요소를 반환 findIndex 는

bbaktaeho-95.tistory.com

 

728x90