-
[JS] 체육복이노베이션 캠프/3주차_알고리즘 2023. 6. 21. 19:23
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42862
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
function solution(n, lost, reserve) { // 1) 서로에게 중복되는 값 제거, 테스트 데이터에서 lost와 reserve에 중복 되는 경우 존재 let losts = lost.filter((a) => !reserve.includes(a)); let reserves = reserve.filter((a) => !lost.includes(a) ); // 2) 갑 정렬, 테스트 데이터에서 정렬되어 있지 않은 데이터 존재 losts.sort((a, b) => a-b); // 3) 체육수업을 들을 수 있는 학생의 최댓값 저장할 변수 = 전체 학생수 - 잃어버린 학생 수로 초기화 let cnt = n - losts.length; // 4) for of문 사용하여 배열의 모든 원소에 접근 for (l of losts) { if (reserves.includes(l-1)) { // 4-1) 앞 번호 학생이 여유분이 있는지 확인 reserves = reserves.filter((a) => a !== l-1); // 빌려준 학생은 여유분을 관리하는 배열에서 제거 cnt++; // 증감 } else if (reserves.includes(l+1)) { // 4-2) 뒷 번호 학생이 여유분이 있는지 확인 reserves = reserves.filter((a) => a !== l+1); cnt++; } } return cnt; }
참고
진짜 이 문제 푸는데 너무 힘들었다..
빠르게 풀고 제출했는데 에러가 발생해서 로직이 잘못된 건지 계속 봤는데 이상한 점을 찾을 수 없었는데
검색해보니 lost와 reserve에 중복된 번호가 저장된 테스트 데이터가 있다는 것이다.
(이것도 이상해.. 왜 잃어버린 학생이 여유분이 있는거지...? 그럼 잃버린게 아니잖아...!)
728x90'이노베이션 캠프 > 3주차_알고리즘' 카테고리의 다른 글
[JS] 실패율 (0) 2023.06.21 [JS] 크레인 인형뽑기 게임 (0) 2023.06.21 [JS] 다트 게임 (1차) (0) 2023.06.21 [JS] 비밀지도 (0) 2023.06.21 [JS] 폰켓몬 (0) 2023.06.21