티스토리 뷰

프로그래머스 42862번 - 체육복

프로그래머스 42862번 - https://programmers.co.kr/learn/courses/30/lessons/42862

 

요구사항

1. 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다.

2. 여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있습니다.

3. 체육복이 있어야 체육 수업을 들을 수 있습니다.

4. 체육수업을 들을 수 있는 학생의 최댓값을 반환하라.

 

요구사항 분석 및  풀이과정

1. 체육복을 도난당한 사람에게는 체육복을 0벌을 줍니다.

2. 여복 체육복을 가져온 학생은 2벌을 줍니다.

3. 처음 학생부터 마지막 학생까지 순회하면서 체육복이 없을 경우 좌우 학생이 여복 체육복이 있을 경우 빌립니다.

4. 체육복을 소유한 학생의 수를 계산합니다.

 

소스코드 작성

import java.util.Arrays;

class Solution {
    
    public int solution(int n, int[] lost, int[] reserve) {
        int[] students = new int[n];
        
        for(int i = 0; i < n; i++) {
            students[i]++;
        }
        
        for(int l : lost) {
            students[l-1]--;
        }
        
        for(int r : reserve) {
            students[r-1]++;
        }
             
        for(int i = 0; i < n; i++) {
            if (i-1 >= 0 && students[i-1] == 0 && students[i] >= 2) {
                students[i-1]++;
                students[i]--;
            }
            if (i+1 < n && students[i+1] == 0 && students[i] >= 2) {
                students[i+1]++;
                students[i]--;
            }
        }
        
        return (int)Arrays.stream(students).filter(student -> student >= 1).count();
    }
}

 

결과

 

소스코드 깃허브 주소

링크

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함