[프로그래머스] 체육복 - 자바스크립트

Jinny·1일 전
0
  • 날짜 / 주차-누적 횟수: 2025.02.06(목) / 1주차-4회
  • 사이트 이름: 프로그래머스
  • 사용 언어: JavaScript
  • 문제 고유 번호 및 레벨: 42862133025 / Lev 1
  • 나의 풀이 방법: 풀지 못했음
  • 최적 풀이 방법:
    
    function solution(n, lost, reserve) {
        const students = {}; // students 객체를 생성한다.
        let answer = 0; // answer 변수를 생성한다.
        
        for(let i = 1; i <= n; i++){ // 일반 for 문으로 1부터 학생수까지 순회한다.
            students[i] = 1; // students 객체에 key를 학생의 번호 value를 1로 넣는다. 
        }
        
        // 잃어버린 학생들 번호가 담긴 lost 배열을 순회한다. 
        // lost에 있는 요소를 students객체 key값으로 접근하고 있다면 -1을 한다. (value가 0이됨)
        lost.forEach(number => students[number] -= 1);
        
        // 여벌을 보유한 reserve 배열을 순회한다.
        // students객체에 해당 되는 번호에 +1을 한다 (2가 된다.)
        reserve.forEach(number => students[number] += 1);
    
    		// for 문으로 학생수까지 순회한다.
        for(let i = 1; i <= n; i++){
    		    // students객체의 value가 여러벌이고 students객체의 앞 번호가 체육복이 없으면
            if(students[i] === 2 && students[i-1] === 0){
    				        // 앞 번호에 +1을 더해준다.
                    students[i-1]++;
                    // 체육복을 주었으니 자신에게는 -1 해준다.
                    students[i]--;
              // 내가 2개가 있고 뒤에 잃어버렸으면? 
            } else if(students[i] === 2 && students[i+1] === 0){
    								// 뒤 사람에게 빌려주고
                    students[i+1]++;
                    // 나는 -1 
                    students[i]--;
            }
        }
        
        // key값대로 students 객체를 돈다. 
        for(let key in students){
    		    // 1보다 많은 경우
            if(students[key] >= 1){
    		        answer에 +1 
                answer++;
            }
        }
        return answer;
    }
    • 주석으로 설명 적음
  • 배운 개념:
    • 하나씩 해결해야 되는 문제인 경우 객체를 활용하여 하나씩 하나씩 차근차근 풀어보자.
profile
세상을 이롭게 하는 프론트엔드 개발자 Jinny

0개의 댓글

관련 채용 정보