[프로그래머스 자바스크립트] ‘체육복’ 풀어보기

2024. 8. 7. 16:17·Algorithm/Programmers(JavaScript)
목차
  1. 1. 나의 풀이
  2. 2. 다른 사람의 풀이

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42862

 

프로그래머스

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

programmers.co.kr


1. 나의 풀이

function solution(n, lost, reserve) {
    // 배열 정렬
    lost.sort((a, b) => a - b);
    reserve.sort((a, b) => a - b);
    

    let lost_cnt = lost.length; 
    
    for (let i = lost.length - 1; i >= 0; i--) {
        
        let l = lost[i];
        var rightIndex = reserve.indexOf(l);
        if (rightIndex !== -1) {
            reserve.splice(rightIndex, 1);
            lost.splice(i, 1);
            lost_cnt--;
        }
    }
    
    for (let l of lost) {
        var minusIndex = reserve.indexOf(l - 1);
        var plusIndex = reserve.indexOf(l + 1);
        
        
        if (minusIndex !== -1) {
            console.log("minus");
            reserve.splice(minusIndex, 1);
            lost_cnt--;
        } else if (plusIndex !== -1) {
            console.log("plus");
            reserve.splice(plusIndex, 1);
            lost_cnt--;
        }
    }
    
    return n - lost_cnt;
}
  1. lost 배열과 reserve 배열을 정렬한다.
  2. lost 배열을 순회하면서 lost와 reserve에 같은 값이 있는지 찾고, 있다면 해당 값을 lost와 reserve에서 제거하고 lost_cnt를 1 감소시킨다. (indexOf를 통하여 index를 찾고 splice로 해당 index에 있는 값을 제거하는 방법을 활용했다) ->  여벌 체육복을 가져온 학생이 체육복을 도난당했을 경우를 먼저 고려한 것인데, 이 부분을 고려하지 못했어서 많이 헤맸었다.
  3. lost 배열을 순회하면서 reserve에 lost보다 1보다 크거나 작은 값을 찾아서 해당 값을 reserve 배열에서 제거하고 lost_cnt를 1 감소시킨다.
  4. n에서 lost_cnt를 뺀 값을 return 한다.

2. 다른 사람의 풀이

function solution(n, lost, reserve) {
    const students = {};
    let answer = 0;
    for(let i = 1; i <= n; i++){
        students[i] = 1;
    }
    lost.forEach(number => students[number] -= 1);
    reserve.forEach(number => students[number] += 1);

    for(let i = 1; i <= n; i++){
        if(students[i] === 2 && students[i-1] === 0){
                students[i-1]++;
                students[i]--;
        } else if(students[i] === 2 && students[i+1] === 0){
                students[i+1]++;
                students[i]--;
        }
    }
    for(let key in students){
        if(students[key] >= 1){
            answer++;
        }
    }
    return answer;
}
  1. 모든 학생은 1개의 체육복을 가지고 있다고 가정한다.(students 배열에 1을 넣는다.)
  2. lost 배열의 학생들은 체육복을 1개 잃고, reserve 배열의 학생들은 체육복을 1개 얻는다.
  3. i-1번째 학생이 체육복이 0개, i번째 학생이 체육복이 2개면 i번째 학생이 i-1번째 학생에게 체육복을 1개 빌려준다.
  4. i번째 학생이 체육복이 2개, i+1번째 학생이 체육복이 0개면 i번째 학생이 i+1번째 학생에게 체육복을 1개 빌려준다.
  5. 체육복이 1개 이상인 학생들이 몇 명인지 세서 return한다.

깔끔하고 이해하기 쉬운 풀이였다. 이 풀이를 활용하면 여벌 체육복을 가져온 학생이 체육복을 잃어버렸을 경우를 따로 계산하지 않아도 자연스럽게 계산에 포함되기 때문에 더 좋은 코드인 것 같다.

저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Programmers(JavaScript)' 카테고리의 다른 글

[프로그래머스 자바스크립트] ‘K번째수’ 풀어보기  (1) 2024.08.07
[프로그래머스 자바스크립트] ‘구명보트’ 풀어보기  (0) 2024.08.07
[프로그래머스 자바스크립트] ‘기능개발’ 풀어보기  (0) 2024.07.17
[프로그래머스 자바스크립트] ‘같은 숫자는 싫어’ 풀어보기  (4) 2024.07.17
[프로그래머스 자바스크립트] '완주하지 못한 선수' 풀어보기  (0) 2024.07.17
  1. 1. 나의 풀이
  2. 2. 다른 사람의 풀이
'Algorithm/Programmers(JavaScript)' 카테고리의 다른 글
  • [프로그래머스 자바스크립트] ‘K번째수’ 풀어보기
  • [프로그래머스 자바스크립트] ‘구명보트’ 풀어보기
  • [프로그래머스 자바스크립트] ‘기능개발’ 풀어보기
  • [프로그래머스 자바스크립트] ‘같은 숫자는 싫어’ 풀어보기
퀵차분
퀵차분
Web Developer 🥐
  • 퀵차분
    QC's Devlog
    퀵차분
  • 전체
    오늘
    어제
    • 분류 전체보기 (168)
      • Frontend (28)
        • HTML, CSS (7)
        • Javascript (3)
        • React (11)
        • Typescript (2)
        • Next.js (4)
      • Node.js (3)
      • Fedify (3)
      • Study (40)
        • Modern JS Deep Dive (13)
        • SQL (1)
        • Network (1)
        • 프롬프트 엔지니어링 (4)
        • 인공지능 (9)
        • 시스템프로그래밍 (11)
        • 선형대수학 (1)
      • Intern (4)
      • KUIT (20)
      • Algorithm (48)
        • Baekjoon(C++) (26)
        • Programmers(JavaScript) (22)
      • 우아한테크코스(프리코스) (4)
      • Project (7)
        • PROlog (4)
        • Nomadcoder (2)
      • 생각 (4)
      • Event (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스 자바스크립트
    백준
    티스토리챌린지
    KUIT
    시스템프로그래밍
    음악추천
    오블완
    프론트엔드
    프로그래머스
    javascript
    HTML
    next.js
    typescript
    인공지능
    프롬프트 엔지니어링
    react
    리액트
    타입스크립트
    알고리즘
    자바스크립트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
퀵차분
[프로그래머스 자바스크립트] ‘체육복’ 풀어보기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.